Фильтрация DataGrid, MVVM, Dynamic LINQ - PullRequest
1 голос
/ 27 декабря 2010

Как я могу фильтровать свои элементы DataGrid, например, работает фильтр MS Access (просто выделите мышью какую-то часть ячейки и нажмите кнопку «Фильтр»)?

У меня есть ViewModel MyViewModel с 2 командами (Filter и ClearFilter)и ObservableCollection У меня есть модель с методом GetItems (...);

в событии DataGrid CellEditEnding. Я сохраняю выбранный путь и имя столбца:

_selectedColumn = e.Column;
if (e.EditingElement is TextBox)
    _selectedText = (e.EditingElement as TextBox).SelectedText;

Итак, у меня есть 2 параметра: мой T-объектимя свойства, по которому необходимо отсортировать, и значение фильтра (оба являются typeof String).

Как мне изменить метод модели GetItems, что бы он работал.Метод Model.GetItemws использует EntityFramework для запроса элементов из базы данных.Как я могу применить к этому запросу мой фильтр и как я могу построить этот запрос?Некоторое динамическое LINQ / выражение

var items = EFQuery().**Where(myFilter)**.ToList();

Где и как мне создать этот myFilter?

1 Ответ

0 голосов
/ 28 июня 2019

Вы можете написать лямбда-фильтр следующим образом:

.Where(x => x.GetType().GetProperty(AA).GetValue(x).ToString().Contains(BB))

Где AA - переменная, которая содержит имя выбранного столбца

BB - переменная, которая содержит текст фильтра.

Ограничение: Ваше свойство AA должно быть строкой или классом, который переопределил метод ToString

...