首页 > 解决方案 > 当在“for”循环中添加项目时,如何立即通知绑定到 ObservableCollection 的 DataGrid?

问题描述

假设我有这个数据网格:

<DataGrid x:Name="MyGrid" AutoGenerateColumns="True" ItemsSource="{Binding MyObservableList}"></DataGrid>

假设我有这个循环:

for (int i = 0; i < 10; i++)
{
  MyObservableList.Add(i.ToString());
  Console.WriteLine(i.ToString());
  Thread.Sleep(500);
}

插入项目后是否可以立即更改 wpf 列表?像“Console.Write”代码?我尝试了很多东西,比如实现“CollectionChanged”或“INotifyPropertyChanged”,但它们只在循环结束时更新 DataGrid 。注意:目标是在循环过程中从 ObservableCollection 更新 DataGrid。任何类型的可观察列表的示例都可以。

标签: .netwpfmvvmobservablecollection

解决方案


不要在 UI 线程上休眠,因为它会阻止它更新 UI。使用任务异步等待:

for (int i = 0; i < 10; i++)
{
    MyObservableList.Add(i.ToString());
    Console.WriteLine(i.ToString());
    await Task.Delay(500);
}

推荐阅读