フィルタリングの最適なパフォーマンス調整は、DataGridRow の可視性を切り替えることでした。それは違いの大きさを作りました!
1. IsVisible プロパティを、DataGrid の ItemSource をバインドする Collection Item に追加します。
private bool _isVisible = true;
public bool IsVisible
{
get { return _isVisible; }
set
{
if (_isVisible == value)
return;
_isVisible = value;
RaisePropertyChanged(()=>IsVisible);
}
}
2. IsVisible プロパティにバインドして、DataGridRow の可視性をトリガーします。
<DataGrid.ItemContainerStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Visibility"
Value="{Binding Path=IsVisible,
Converter={StaticResource BoolToVisibility}}"/>
</Style>
</DataGrid.ItemContainerStyle>
3.そうですね、ViewModel のように、IsVisible をどこかに設定する必要があります。これは私がやっていることのほんの一例です(ジョブをコピーして貼り付けるだけです)-基本的に、他のViewModelのいくつかの基準に基づいてIsVisibleをtrueまたはfalseに設定します:
FilterViewModel.OnFilter += (s, a) =>
{
foreach (Row row in ViewModel.Rows)
row.IsVisible = !FilterViewModel.FilteringItems.Any(item =>
item.IsSelected && item.Name == row.Name);
};