2016-05-23 11 views
2

ich ein ListView Element in meiner XAML bin mit:Stellen spezifische Listview-Element nicht anklickbar in Universal-Windows-Plattform

   <ListView 
       x:Name="myList" 
       IsItemClickEnabled="true" 
       ItemClick="onDrawerItemClick" 
       SelectionMode="Single" 
       ScrollViewer.VerticalScrollBarVisibility="Hidden"> 

       <ListView.ItemTemplate> 
        <DataTemplate> 

         <Grid 
          Width="260"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition 
            Width="44" /> 
           <ColumnDefinition 
            Width="*" /> 
          </Grid.ColumnDefinitions> 

          <Image 
           x:Name="image" 
           Source="{Binding myIcon}" 
           Grid.Column="0" /> 

          <TextBlock 
           Text="{Binding myTxt}" 
           Grid.Column="1" /> 

         </Grid> 

        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 

und ich bevölkern es Bind Eigenschaft mit etwa so:

List<MyObj> listData = a list with title + image uri; 
myList.ItemsSource = listData; 

Ich muss Deaktivieren Sie klicken Sie nur für einige Elemente abhängig von einem Wert von MyObj in meiner Liste, aber die anderen, um es zu haben. In Android verwenden wir Adapter dafür, wie soll ich das hier behandeln?

+0

verweisen Sie diesen Link http://stackoverflow.com/questions/37132267/disable-certain-listviewitem-depending-on-custom-property-uwp/37133619#37133619 – Archana

Antwort

5

Zuerst sollten Sie eine neue bool Eigenschaft namens Disabled in Ihrem MyObj Objekt erstellen.

Dann abonnieren Sie myList ‚s ContainerContentChanging Veranstaltung, wo Sie Zugriff auf die ListViewItem haben und ihre entsprechenden Item, die in diesem Fall Ihre MyObj ist. Wenn also MyObj.Disabledtrue ist, machen Sie ListViewItem nicht anklickbar.

private void myList_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args) 
{ 
    var listViewItem = args.ItemContainer; 

    if (listViewItem != null) 
    { 
     var model = (MyObj)args.Item; 

     if (model.Disabled) 
     { 
      listViewItem.IsHitTestVisible = false; 

      // OR 
      //listViewItem.IsEnabled = false; 
     } 
    } 
} 

Denken Sie daran, dass Sie vielleicht listViewItem.IsEnabled = false verwenden, wenn Sie das Element wollen gedimmt erscheinen. Dies liegt daran, dass der Standard ListViewItem style einen Disabled Zustand hat, der seine Opacity reduziert; während der Einstellung listViewItem.IsHitTestVisible = false wird sein Aussehen in keiner Weise ändern.

0

Das ListView ist ein seltsames Steuerelement, da es keinen Mechanismus zum Deaktivieren der Auswahl hat.

Also, was ich schlage vor, Sie sind vielmehr das Ereignis behandeln, die den Rahmen darüber informiert, dass ein Element durch Anbringen eines Ereignishandler ItemSelectionChanged ausgewählt wurde und in eine Abwahl auf dem Element ausführen:

yourListView.ItemSelectionChanged += yourListView_ItemSelectionChanged; 

private void yourListView_ItemSelectionChanged(
    object sender, 
    ListViewItemSelectionChangedEventArgs e) 
{ 
    if (e.IsSelected) 
     e.Item.Selected = false; 
} 

Bitte lassen Sie mich wissen, wenn meine Antwort hilft :)