【发布时间】:2012-12-27 11:09:23
【问题描述】:
我正在编写一个从本地数据库读取数据并将它们显示在列表框中的应用程序(我在 WPF 中工作)。
我有一个 DVD 对象,它的属性是 db 的列。此 DVD 对象还实现 INotifyPropertyChanged。 “MyDVDs”是指 db 的表。一旦创建了这些对象,我就创建了一个继承自 ObservableCollection 的类,并在构造函数中从“MyDVDs”中获取数据。但是,我不仅需要从列表框中添加、删除和更新数据,还需要对它们进行排序和过滤。这是 ObservableCollection 的代码:
class ObservableDVD : ObservableCollection<DVD>
{
private ICollectionView collection;
public ObservableDVD(MyDVDs e)
{
foreach (DVD d in e.DVDs)
{
this.Add(d);
}
Collection = CollectionViewSource.GetDefaultView(this);
}
public ICollectionView Collection
{
get { return collection; }
private set { collection = value; }
}
}
我想知道,这是个好方法吗??还是我可以做得更好?
在项目的 MainWindow 中,当 Load_Window 事件触发时,我将 Collection 属性分配给 listbox.ItemSource(在 MainWindow 代码隐藏中,我声明了一个明显引用 ObservableDVD 对象的私有字段)。我有一些按钮可以让我执行我之前告诉你的操作。在按钮的事件头中,我直接更新和修改 ObservableDVD 对象,而不是它的属性 Collection。但是,Collection 属性也反映了这些更改。
为什么会出现这种情况? 对我来说没关系,但我不明白为什么会这样。是因为通知吗?
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
标签: c# wpf listbox observablecollection collectionviewsource