Filter WPF-TreeView mit MVVM
Momentan habe ich ein TreeView, das die folgende Struktur hat:
<TreeView ItemsSource="{Binding RootViewModels}"
FontSize="12">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="local:TreeViewItemBehaviour.IsBroughtIntoViewWhenSelected"
Value="True" />
<Setter Property="IsExpanded"
Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="Visibility"
Value="{Binding IsVisible, Mode=TwoWay, Converter={StaticResource boolVisibilityConverter}}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding SomeDisplayText}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
wo RootViewModels
und Children
Typ ObservableCollection<SomeItemViewModel>
In die gleiche Ansicht habe ich ein ComboBox
und ich möchte den ausgewählten Eintrag in diesem ComboBox
zu dienen, wie die Kriterien zum filtern der TreeView
durch. Ich habe eine ViewModelRepository das ist auch von Typ ObservableCollection<SomeItemViewModel>
und ist von meinem IoC-container. Ich benutze diese um meine anderen ObservableCollections, dass in der XAML-Code oben.
Im moment bin ich versucht, in der Visibility
jeder SomeItemViewModel in meinem ViewModelRepository, wenn ein Element in der ComboBox ausgewählt ist. Dies scheint zu funktionieren für alles unterhalb der ersten beiden Ebenen im Baum, aber nicht für die 2. Ebene (die erste Ebene wird die Wurzel, die immer sichtbar ist).
Aber es funktioniert nicht konsequent. Wenn ich den "filter" der richtige Knoten sind unsichtbar, aber wenn ich dann erweitern Sie einen Knoten, enthält "gefiltert" - Knoten, dann werden alle nachfolgenden "Filter" scheitern.
Ich habe gelesen, über das binden ItemsControls, um eine CollectionViewSource, um zu tun filtern, aber ich kann nicht finden, ein Beispiel dafür ist die Nutzung mit dem TreeView. Hat jemand irgendwelche Hinweise, wie ich Sie hier?
- Verwandte: stackoverflow.com/questions/1313325/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
könnten Sie ICollectionView filtern Ihre Sammlung.
so etwas wie dieses:
Bearbeiten: Sie müssen erstellen Sie die Ansicht, wenn Sie rufen neue YourObservableCollection();