Wie legen Sie einen filter für ein DataGrid-ItemSource über MVVM
Ich habe eine DataGrid gebunden CollectionViewSource in XAML.
<Window.Resources>
<local:MainWindowViewModel x:Key="ViewModel"/>
<CollectionViewSource x:Key="cvsEntries"
Source="{Binding LogEntriesStore,
Source={StaticResource ViewModel}}"/>
</Window.Resources>
LogEntriesStore
ist ein ObservableCollection (LogEntry wird ein DTO-das ist nicht wichtig in dieser Diskussion)
Den DataGrid ist deklariert als:
<DataGrid AutoGenerateColumns="False"
Margin="0"
Name="dataGrid1"
ItemsSource="{Binding Source={StaticResource cvsEntries}}"
IsReadOnly="True">
Nun habe ich Kontext-Menüs auf verschiedene Zellen in diesem DataGrid, um kick-off ein Antrag für die Filterung. Der rechten Maustaste auf eine Zelle, und wählen Sie filter, filter alle Zeilen, und zeigen Sie nur diese bestimmten Wert.
Dem MVVM bekommt die Anfrage zu filtern, aber jetzt das knifflige bit. Wie setze ich den filter auf die CollectionViewSource?
(nebenbei-das hätte ein Spaziergang im park mit einem Silverlight - PagedCollectionView
aber das scheint nicht verfügbar zu sein in WPF, ist das richtig?)
- ist es das, was du suchst bea.stollnitz.com/blog/?p=31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehr einfach. Sie brauchen nur zu bewegen, die Sammlung Blick in die view-model:
In
MainWindowViewModel
definieren Sie eine Eigenschaft vom TypICollectionView
:Rechts, nachdem Sie initialisiert wurden die
LogEntriesStore
Eigenschaft, die Sie brauchen, um zu initialisieren, dieLogEntriesStoreView
- Eigenschaft mit dem folgenden code:Dann müssen Sie entfernen die
CollectionViewSource
von XAML und ändern Sie dieItemsSource
Bindung, der neu angelegte Sammlung anzeigen-Eigenschaft:Das ist es. Sie haben jetzt Zugriff auf die Auflistung anzeigen innerhalb deines view-Modell, bei dem können Sie den filter ändern.
Gibt es mehrere Lösungen für dein problem, aber meiner Meinung nach, die besten Lösungen sind diejenigen, die verwendet nur styles mit dem standard-WPF -
DataGrid
Kontrolle, ohne die Erfindung eines neuen geerbtDataGird
Art oder in Abhängigkeit von einem anderen Drittanbieter-Steuerelement. Im folgenden werden die besten Lösungen die ich gefunden habe: