使用BindingList更新datagrid

时间:2014-09-09 20:58:21

标签: c# wpf mvvm

我一直在研究BindingList与observablecollection和List之间的区别。从我读过的内容来看,BindingList似乎是唯一一个会在其中的对象的某个属性发生更改时通知的集合类型。我无法让它发挥作用。

我在一个名为Matches的ViewModel上有一个属性,它返回一个由另一个类中的CarMatch对象列表创建的BindingList。 (Cars m_Cars = new Cars();)我在View上的DataGrid绑定到VM中的Matches属性。

public BindingList<CarMatch> Matches
{ 
    get
    {
        Return new BindingList<CarMatch>(m_Cars.Matches);  
    }
}

现在,在代码中我改变了一个CarMatch对象的属性,比如说.. automatic的自动转换为真。匹配[0] .automaticTrans = true。我想在DataGrid中看到这种变化。如果没有在CarMatch类中实现INotifyPropertyChanged,有没有办法从viewmodel更新datagrid?在匹配上使用INotifyPropertyChanged似乎没有这样做。关于这一点,我只是不明白,可以用一个例子来看待。

2 个答案:

答案 0 :(得分:0)

CarMatch(不是Matches)必须实施INotifyPropertyChanged。但请考虑使用ObservableCollection,除非您确实需要BindingList提供的一些其他方案:ObservableCollectionINotifyPropertyChanged免费提供。更重要的是,BindingList doesn't scale well

答案 1 :(得分:-1)

dataGrid.Items.Refresh();

但请记住,如果你有大量数据并且在很短的时间内多次调用它,这是一个昂贵的电话。