1

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

我得到了一些经常更新的 ViewModel(带有 INotifyPropertyChanged)的 ObservableCollection。

现在我需要像这样将数据塑造成 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 一样,如果新项目进入第一个集合,则新集合会更新,但如果现有项目的属性发生更改,则不会在新集合中更新。

那么有什么想法吗?

4

3 回答 3

1

我不知道 Obtics 或 CLINQ,但这听起来像是 ObservableCollection 的正常行为。它根本不会对其包含的单个项目的属性更改做出反应。因此,您必须编写自己的 ObservableCollection 实现。此处显示了一个示例:ObservableCollection,它还监视集合中元素的更改

于 2012-07-05T13:35:42.533 回答
0

您也应该实施INotifyPropertyChangefrom NewViewModel。在每个订阅源订单上的 INotifyPropertychange 并正确引发新事件。

于 2012-07-05T13:32:33.973 回答
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 应该是类型ObservableCollectionOrder类(我建议它是 _orders 中元素的类型ObservableCollection)应该实现INotifyPropertyChanged

于 2019-11-21T12:24:33.010 回答