使用ObservableCollection实现INotifyPropertyChanged

时间:2012-03-20 16:05:31

标签: wpf observablecollection inotifypropertychanged

我想从数据库中提取数据以显示到ComboBox中,然后允许用户从该ComboBox中选择值并将它们添加到ListBox中(通过添加/删除按钮)。我是否能够使用ObservableCollections来保存数据库值以绑定到ComboBox,因为它实现了INotifyPropertyChanged(和CollectionChanged)?对不起,如果这是一个基本问题,我大约一个月前开始学习WPF。

我已经阅读了Sacha Barber撰写的article(做得非常好)。

我查看了ObservableCollection上的MSDN页面。

使用ObservableCollectionList(我知道没有实现INotifyPropertyChanged)的优点/缺点是什么?

2 个答案:

答案 0 :(得分:2)

您可能需要注意的事项。

不要将ObservableCollection的INotifyPropertyChanged实现与它包含的实现的对象混淆。

如果ObservableCollection中某个对象的某个属性发生更改,则UI不会反映它,除非该对象也实现了INotifyPropertyChanged。不要指望ObservableCollection会为你处理这个问题。

答案 1 :(得分:1)

如果你的组合框中的项目没有改变(即你没有添加/删除/更新项目),那么List可能会满足你的需求(ObservableCollection也是如此)如果您在影响它时手动通知您的List属性已更改。

public List<X> MyList
{
    get
    {
        ...
    }

    set
    {
        if (... != value)
        {
            ... = value;
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("MyList"));
            }
        }
    }
}

....

this.MyList = new List<X> { new X(...), new X(...) };

如果您计划在组合框中添加/删除或更新项目(不创建新的MyList对象,即使用this.MyList.Add(...)),请使用能够通知的ObservableCollection集合已更新(因此它可以更新绑定)。