为什么我的ObservableCollection没有观察到我的DataGridView
本文关键字:我的 观察 DataGridView ObservableCollection 为什么 | 更新日期: 2023-09-27 18:16:37
我不得不求助于视图模型触发事件,并在捕获该事件时刷新整个网格。可观察到的东西如果不被观察到又有什么意义呢?
主表单是这样启动的,首先填充网格,每次有东西添加到集合时重新填充:
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; }
ObservableCollection不是为一个dataGridView工作,因为它没有实现IBindingList
。你必须用BindingList
代替。如果你想要反映属性的变化,请确保你的项目实现INotifyPropertyChanged
。
问题是ObservableCollection是为Wpf控件设计的。
请注意,BindingList
不支持排序或过滤您的数据并反映这一点。此行为仅支持数据表或自定义列表实现。