1
我有一個DataGrid
綁定到ObservableCollection
。基於條件,任何給定的行應該被隱藏。這可以由用戶打開或關閉。問題是,當DataGrid隱藏行中有大量行時,並且取消隱藏行可能會使應用程序一段時間無響應。WPF DataGrid Hide條件導致應用程序無響應
我正在做這樣的隱藏/隱藏與DataGrid.RowStyle
;
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ShowRow}" Value="1">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
爲了便於例如讓說有一個改變在ObservableCollection
ShowRow
從0所有行到1這樣的開關的;
private async void Switch_Checked(object sender, RoutedEventArgs e)
{
foreach (var x in MyCollection)
{
x.ShowAll = 0;
}
}
private async void Switch_UnChecked(object sender, RoutedEventArgs e)
{
foreach (var x in MyCollection)
{
x.ShowAll = 1;
}
}
這對於少量被更改的行很適用。但是,如果有大量的行(例如1,000以上),則應用程序變得無法響應。形象我可以用這樣的命令解決這個問題;
private async void Switch_Checked(object sender, RoutedEventArgs e)
{
var upd = Task.Run(() => UpdateShowAll());
await upd;
}
private async void UpdateShowAll(object sender, RoutedEventArgs e)
{
foreach (var x in MyCollection)
{
x.ShowAll = 0;
}
}
問題是,方法UpdateShowAll
完成長DataGrid.RowStyle
被更新了。處理這個問題的最好方法是什麼?