我必须求助于触发事件的viewmodel,并且在捕获该事件时,刷新整个网格。当没有观察到某些事物时,可观察到的是什么?
这是主窗体启动的方式,首先填充网格,并在每次添加到集合中时重新填充它:
private void MainForm_Load(object sender, EventArgs e)
{
FoundFilesBindingSource.DataSource = ViewModel;
// TODO Try get rid of event model.
ViewModel.FilesFound += (o, args) =>
{
if (FileInfosGrid.InvokeRequired)
{
FileInfosGrid.Invoke(new Action(() => FileInfosGrid.DataSource = ViewModel.FileInfos));
}
else
{
FileInfosGrid.DataSource = ViewModel.FileInfos;
}
};
}
在课程ViewModel
上,FileInfos
被声明为:
public ObservableCollection<FindMatchViewModel> FileInfos { get; set; }
答案 0 :(得分:1)
ObservableCollection不适用于dataGridView,因为它没有实现IBindingList
。您必须使用BindingList
代替。如果您想反映属性的更改,请确保您的商品实施INotifyPropertyChanged
。
问题是ObservableCollection是为Wpf Controls设计的。
请注意,BindingList
不支持对数据进行排序或过滤并反映这一点。只有DataTable或自定义List实现支持此行为。