当在循环期间添加observateCollection时,逐行刷新DataGrid



窗口中有一个DataGrid,它绑定到ObservableCollection,还有一个向集合添加项列表的命令
我希望DataGrid可以在循环过程中逐个添加一行,但现在它将在命令完成后向DataGrid添加一批项。

<DataGrid ItemsSource="{Binding Path=InfoList}" AutoGenerateColumns="False">
<DataGrid.Columns>
    <DataGridTextColumn Header="Column1" Binding="{Binding Path=Field1}" />
    <DataGridTextColumn Header="Column2" Binding="{Binding Path=Field2}" />
    </DataGrid.Columns>
</DataGrid>
public class XXViewModel : INotifyPropertyChanged
{
    private ObservableCollection<Info> infoList = new ObservableCollection<Info>();
    public ObservableCollection<Info> InfoList
    {
        get{return infoList;}           
    }
    private void XXCommand()
    {    
        List<Info> list = this.GetList();
        foreach(var item in list)
        {
            // the datagrid won't update or show this item immediately          
            this.InfoList.Add(item);
            Thread.Sleep(1000);             
        }
    }
}

尝试将添加代码添加到Dispatcher的队列中:

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate
{
    InfoList.Add(item);
    Thread.Sleep(1000); 
});

我们可能无法从您的代码中识别出几个问题:

  1. 您是否设置了视图的DataContext,以便您的集合可以是否在运行时找到
  2. 您的集合类型是否包含表的给定字段列
  3. 您是否在ui线程或其他线程中初始化了视图模型

我倾向于指出1是一个受欢迎的问题。

最新更新