在WPF项目中,我有一个名为OrderHoder的共享类,它是simething as
Dictionary<int,OrderBase> OrderList {get;set;}
该字典通过TCP连接和基于超级插件的库实时填充新数据,更新,删除等。
我有4种不同的视图,它们根据特定类型的OrderBase显示Gridview
public class ForeignOrders: OrderBase
{ omiss}
我希望每个gridview根据OrderBase中定义的属性从OrderHolder获取数据,因此对于ForeignView我只有ForeignOrder类型的项目
对于初始加载,我没有问题,因为我使用LINQ查询来提取数据
OrderList.Select(x=>x.Type == "foreign").ToList()
但这导致了一个问题:我无法了解OrderList修改的方式。
有没有办法可以对Dictionary进行投影,以便我可以捕获更新/插入/删除?
在你问之前我不能只使用一个List,因为我必须知道更新/删除要更改的项目,我不能做
var idx = OrderList.IndexOf(x=>x.Id = 1234)
OrderList.ElementAt(idx) = [newItem]
我忘了说它是在使用caliburn micro的WPF应用程序
答案 0 :(得分:1)
持有OrderList
的班级必须实施INotifyPropertyChanged
然后,每次更改控件的字典时,都必须调用控股类的OnPropertyChanged
方法,以便知道字典实际发生了变化并且必须刷新它的显示。< / p>
为了让您的子类了解OrderList修改,您只需要让他们订阅PropertyChanged
持有者类的OrderList
事件