为什么我的DataGridView没有观察到我的ObservableCollection <t>?

时间:2016-11-05 08:55:56

标签: c# winforms data-binding datagridview observablecollection

我必须求助于触发事件的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; }

1 个答案:

答案 0 :(得分:1)

ObservableCollection不适用于dataGridView,因为它没有实现IBindingList。您必须使用BindingList代替。如果您想反映属性的更改,请确保您的商品实施INotifyPropertyChanged

问题是ObservableCollection是为Wpf Controls设计的。

请注意,BindingList不支持对数据进行排序或过滤并反映这一点。只有DataTable或自定义List实现支持此行为。