我想从数据库中提取数据以显示到ComboBox中,然后允许用户从该ComboBox中选择值并将它们添加到ListBox中(通过添加/删除按钮)。我是否能够使用ObservableCollections
来保存数据库值以绑定到ComboBox,因为它实现了INotifyPropertyChanged
(和CollectionChanged
)?对不起,如果这是一个基本问题,我大约一个月前开始学习WPF。
我已经阅读了Sacha Barber撰写的article(做得非常好)。
我查看了ObservableCollection
上的MSDN页面。
使用ObservableCollection
与List
(我知道没有实现INotifyPropertyChanged
)的优点/缺点是什么?
答案 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
集合已更新(因此它可以更新绑定)。