我有一个非常简单的问题。
我得到了一些ObservableCollection的一些ViewModel(带有INotifyPropertyChanged),它经常更新。
现在我需要将数据整形为NewViewModel的新ObservableCollection,就像这样;
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,如果新项目进入第一个集合,但是如果现有项目的属性发生更改,则新集合会更新,但新集合中的新项目不会更新。
所有想法?
答案 0 :(得分:1)
我不知道Obtics或CLINQ,但它听起来像是ObservableCollection的正常行为。 不对其包含的单个项目的属性更改做出反应。所以你必须编写自己的ObservableCollection实现。 此处显示了一个示例:ObservableCollection that also monitors changes on the elements in collection
答案 1 :(得分:0)
您也应该从INotifyPropertyChange
实施NewViewModel
。在每个订阅中,源订单上的INotifyPropertychanged并正确地引发新事件。
答案 2 :(得分:0)
您还可以尝试使用我的ObservableComputations库。使用该库:
var query = _orders.Selecting(o =>
new ComplexRowViewModel()
{Isin = o.Isin,
Name = o.Isin,
GermanSymbol = o.Exchange,
PrimarySymbol = o.State.ToString()};
GridData = query;
要使_orders之上的代码处于_orders类型,则应使用ObservableCollection
类,并且应实现Order
类(我建议它是_orders ObservableCollection
中的元素类型)。 / p>