塑造ObservableCollection

时间:2012-07-05 13:03:11

标签: c# wpf viewmodel observablecollection

我有一个非常简单的问题。

我得到了一些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,如果新项目进入第一个集合,但是如果现有项目的属性发生更改,则新集合会更新,但新集合中的新项目不会更新。

所有想法?

3 个答案:

答案 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>

相关问题