So legen Sie einen Filter für eine DataGrid-Objektquelle über MVVM fest

8

Ich habe ein DataGrid an eine CollectionViewSource in XAML gebunden.

%Vor%

LogEntriesStore ist eine ObservableCollection ( LogEntry ist ein DTO, das in dieser Diskussion nicht wichtig ist)

Das DataGrid wird wie folgt deklariert:

%Vor%

Jetzt habe ich Kontextmenüs in verschiedenen Zellen in diesem DataGrid , um eine Filteranfrage zu starten. Klicken Sie mit der rechten Maustaste auf eine Zelle und wählen Sie Filter, um alle Zeilen zu filtern und nur diesen bestimmten Wert anzuzeigen.

Der MVVM bekommt die Anforderung zu filtern, aber das ist jetzt das knifflige Bit. Wie setze ich den Filter für die CollectionViewSource?

(nebenbei - das wäre ein Spaziergang im Park mit Silverlight PagedCollectionView gewesen, aber das scheint in WPF nicht verfügbar zu sein, stimmt das?)

    
Ralph Shillington 27.04.2011, 20:06
quelle

2 Antworten

15

Sehr einfach. Sie müssen nur die Sammlungsansicht in das Ansichtsmodell verschieben:

  1. In MainWindowViewModel definieren Sie eine Eigenschaft vom Typ ICollectionView :

    %Vor%
  2. Gleich nachdem Sie die Eigenschaft LogEntriesStore initialisiert haben, müssen Sie die Eigenschaft LogEntriesStoreView mit dem folgenden Code initialisieren:

    %Vor%
  3. Dann müssen Sie die CollectionViewSource aus XAML entfernen und die Bindung ItemsSource so ändern, dass sie auf die neu erstellte Sammlungsansichtseigenschaft zeigt:

    %Vor%

Das ist es. Jetzt haben Sie Zugriff auf die Sammlungsansicht in Ihrem Ansichtsmodell, in der Sie den Filter ändern können.

    
Pavlo Glazkov 27.04.2011, 20:27
quelle
1

Es gibt mehrere Lösungen für Ihr Problem, aber meiner Meinung nach sind die besten Lösungen diejenigen, die nur Styles mit dem Standard-WPF DataGrid -Steuerelement verwenden, ohne einen neuen geerbten DataGird -Typ zu erfinden oder von einem anderen Drittanbieter abhängig zu sein Steuerung. Die folgenden sind die besten Lösungen, die ich gefunden habe:

Mohammed A. Fadil 08.01.2012 10:33
quelle

Tags und Links