我有一个非常简单的问题。
我得到了一些ViewModel的ObservableCollection(带有INotifyPropertyChanged),它经常更新。
现在我需要将数据塑造成一个新的 NewViewModel 的可观察集合,如下所示;
var query = from o in _orders
select new ComplexRowViewModel()
{Isin = o.Isin,
Name = o.Isin,
GermanSymbol = o.Exchange,
PrimarySymbol = o.State.ToString()};
GridData = query;
但这当然不起作用。如果我使用 Obtics 或 CLINQ,如果新项进入第一个集合,新集合就会更新,但如果现有项的属性发生更改,则新集合中不会更新。
那么有什么想法吗?
我不知道 Obtics 或 CLINQ,但这听起来像是 ObservableCollection 的正常行为。它根本不会对它包含的单个项目的属性更改做出反应。因此,您必须编写自己的 ObservableCollection 实现。此处显示了一个示例:ObservableCollection,它还监视集合中元素的更改
你也应该从NewViewModel
实现INotifyPropertyChange
。在每个子订阅中,INotifyProperty更改源订单并正确引发新事件。
你也可以试试我的ObservableComputings库。使用该库:
var query = _orders.Selecting(o =>
new ComplexRowViewModel()
{Isin = o.Isin,
Name = o.Isin,
GermanSymbol = o.Exchange,
PrimarySymbol = o.State.ToString()};
GridData = query;
要使上面的代码工作_orders应该是ObservableCollection
类型,并且Order
类(我建议它是_orders ObservableCollection
中的元素类型)应该实现INotifyPropertyChanged
。