Лучшей настройкой производительности для фильтрации было переключение DataGridRow Visibility. Это имело значение разницы!
1.Добавьте свойство IsVisible к элементу коллекции, с которым вы связываете ItemSrid объекта DataGrid.
private bool _isVisible = true;
public bool IsVisible
{
get { return _isVisible; }
set
{
if (_isVisible == value)
return;
_isVisible = value;
RaisePropertyChanged(()=>IsVisible);
}
}
2. Запустите видимость DataGridRow, привязав его к свойству IsVisible:
<DataGrid.ItemContainerStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Visibility"
Value="{Binding Path=IsVisible,
Converter={StaticResource BoolToVisibility}}"/>
</Style>
</DataGrid.ItemContainerStyle>
3.Хорошо, вы должны установить IsVisible где-то, я думаю, тоже, как в вашей ViewModel. Вот только пример того, что я делаю (просто копирую / вставляю задание) - в основном устанавливаю IsVisible в true или false, основываясь на некоторых критериях в моей другой ViewModel:
FilterViewModel.OnFilter += (s, a) =>
{
foreach (Row row in ViewModel.Rows)
row.IsVisible = !FilterViewModel.FilteringItems.Any(item =>
item.IsSelected && item.Name == row.Name);
};