2016-10-11 5 views
0

Ich habe ein ViewModel, das eine beobachtbare Objektgruppe namens AllNodesAndEntries enthält. Jedes Element hat eine boolesche Eigenschaft IsEnabled. Jetzt möchte ich die Elemente in einem TreeView anzeigen und die IsEnabled-Eigenschaft jedes TreeViewItem an die IsEnabled-Eigenschaft des zugrunde liegenden Elements des ViewModel binden. Wie mache ich das?TreeViewItem.IsEnabled an die ViewModel-Eigenschaft für jedes TreeViewItem binden

Hier ist mein TreeView. Es gibt zwei verschiedene Arten von Artikeln (Node und Entry), also habe ich eine hierarchische und eine normale Datenvorlage.

<TreeView ItemsSource="{Binding AllNodesAndEntries}"> 
     <TreeView.Resources> 
      <HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type local:Node}"> 
       <TextBlock Text="{Binding Name}"/> 
      </HierarchicalDataTemplate> 
      <DataTemplate DataType="{x:Type local:Entry}"> 
       <TextBlock Text="{Binding Name}""/> 
      </DataTemplate> 
     </TreeView.Resources> 
     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <!-- How do I bind to TreeViewItem.IsEnabled to IsEnabled? --> 
      </Style> 
     </TreeView.ItemContainerStyle> 
    </TreeView> 

Es scheint, dass ich es nicht innerhalb TreeView.ItemContainerStyle tun kann, denn da kann ich nur Setter definieren. Setter erlauben jedoch nicht, den Wert zu binden ...

+0

Setter erlauben Bindung der Wert ... Wie schreibt man Bindungen? – ASh

+0

Okay, ich dachte, dass erlaubte Syntax nur das ist, was beim Tippen auftaucht. Und als ich "Value =" "' tippte, zeigte es mir nur 'True' und' False'. Lektion gelernt, danke! – Kjara

Antwort

1

Verwenden Sie den Setter, um die "IsEnabled" -Eigenschaft an Ihre "IsEnabled" -Eigenschaft jedes TreeViewItem zu binden.

<TreeView.ItemContainerStyle> 
    <Style TargetType="{x:Type TreeViewItem}"> 
     <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/> 
    </Style> 
</TreeView.ItemContainerStyle>