在循环期间添加observablecollection时,逐行刷新DataGrid?

时间:2013-12-02 09:22:10

标签: c# wpf datagrid

Windows中有一个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);             
        }
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我们无法从您的代码中识别出一些问题:

  1. 您是否设置了视图的DataContext,以便您的收藏可以 在运行时找到?
  2. 您的集合类型是否包含表的给定字段 列?
  3. 您是否在ui线程或其他线程中初始化了视图模型?
  4. 我倾向于指出1是一个受欢迎的问题。