窗口中有一个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);
});
我们可能无法从您的代码中识别出几个问题:
- 您是否设置了视图的DataContext,以便您的集合可以是否在运行时找到
- 您的集合类型是否包含表的给定字段列
- 您是否在ui线程或其他线程中初始化了视图模型
我倾向于指出1是一个受欢迎的问题。