为什么我的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<T>没有观察到我的DataGridView

ObservableCollection不是为一个dataGridView工作,因为它没有实现IBindingList。你必须用BindingList代替。如果你想要反映属性的变化,请确保你的项目实现INotifyPropertyChanged

问题是ObservableCollection是为Wpf控件设计的。

请注意,BindingList不支持排序或过滤您的数据并反映这一点。此行为仅支持数据表或自定义列表实现。