У меня есть DataGrid
в XAML (из приложения WPF) с канонической привязкой к ICollectionView
. В модели представления я применяю фильтр как обычно (например, представьте условие даты рождения).
PeopleView = CollectionViewSource.GetDefaultView(People);
PeopleView.Filter = o => ((Person)o).birth >= selDateFrom && ((Person)o).birth <= selDateTo;
PeopleView.Refresh();
Где selDateFrom
(selDateTo
) - это вспомогательное поле другого свойства, связанного с пользователь DatePicker
. У меня также есть пользовательский ввод, связанный с полем int
, скажем, оно называется limit
, и я хочу ограничить строки, уже отфильтрованные по указанному выше условию, максимумом limit
.
Как я могу изменить этот код?
Что я пробовал
Я ожидаю найти решение, очень похожее на следующее, хотя оно не работает (оно не показывает любая линия в сетке).
PeopleView = CollectionViewSource.GetDefaultView(People);
int filterCount = 0;
PeopleView.Filter = o =>
{
bool ret =
((Person)o).birth >= selDateFrom && ((Person)o).birth <= selDateTo;
if (ret)
{
filterCount++;
}
bool pass = filterCount <= limit;
return ret && pass;
};
PeopleView.Refresh();
Я думаю, что ей не хватает совсем немного, но что именно я пропускаю? Отлаживая код в Visual Studio 2019, я вижу правильные логические значения, возвращаемые функцией Filter
.