我有一个数据网格正在接收 100,000+ 行的更新,该更新绑定到 CollectionViewSource.View,其源是 ObservableCollection。如果我尝试在当前设置中更新,当我将新行添加到 ObservableCollection 时,UI 会完全冻结。为了解决这个问题,我在将行添加到 ObservableCollection 之前设置了 CollectionViewSource.Source = null,这样它就可以正常工作。唯一的问题是,一旦我为第一次加载执行此操作,下一次加载仍然会出现 UI 冻结问题。这是代码。
public CollectionViewSource ViewSource { get; set; }
private ObservableCollection<ScreenerRow> internalRows = new ObservableCollection<ScreenerRow>();
private async Task Search()
{
internalRows.Clear();
ViewSource.Source = null;
var data = await Task.Run(() =>
{
return DoStuff();
});
if (data == null) return;
foreach (ScreenerRow sRow in data)
{
//freezes in here on second run
internalRows.Add(sRow);
}
ViewSource.Source = internalRows;
}
只是想知道是否有其他人遇到过这个问题,或者看到我这样做的方式有问题。谢谢您的帮助。
编辑:将我的 ObservableCollection 更改为 List 可以正常工作。
//private ObservableCollection<ScreenerRow> internalRows = new ObservableCollection<ScreenerRow>();
private List<ScreenerRow> internalRows = new List<ScreenerRow>();