Wie kann ich meine DataGrid-Elemente filtern, so wie der MS Access-Filter funktioniert (wählen Sie einfach einen Teil der Zelle mit der Maus aus und klicken Sie auf die Schaltfläche "Filter")?
Ich habe ViewModel MyViewModel mit 2 Befehlen (Filter und ClearFilter) und ObservableCollection Ich habe Modell mit Methode GetItems (...);
Im DataGrid CellEditEnding-Ereignis speichere ich den ausgewählten Pfad und Spaltennamen:
_selectedColumn = e.Column;
if (e.EditingElement is TextBox)
_selectedText = (e.EditingElement as TextBox).SelectedText;
Ich habe also zwei Parameter: den Eigenschaftsnamen meines T-Objekts, nach dem sortiert werden muss, und den Filterwert (beide sind vom Typ String).
Wie soll ich die Methode GetItems des Modells ändern, was würde es funktionieren? Die Methode Model.GetItemws verwendet EntityFramework, um Elemente aus der Datenbank abzufragen. Wie kann ich auf diese Abfrage meinen Filter anwenden und wie kann ich diese Abfrage erstellen? Einige dynamische LINQ / Expression
var items = EFQuery().**Where(myFilter)**.ToList();
Wo und wie soll ich diesen myFilter erstellen?
Sie können Filter Lambda wie folgt schreiben:
.Where(x => x.GetType().GetProperty(AA).GetValue(x).ToString().Contains(BB))
Wobei AA eine Variable ist, die den ausgewählten Spaltennamen enthält
BB ist eine Variable, die einen Filtertext enthält.
Einschränkung: Ihre Eigenschaft AA muss die Zeichenfolge oder Klasse sein, die die ToString-Methode überschrieben hat