在WPF MVVM中处理模型中的集合

时间:2013-11-05 14:14:03

标签: c# wpf mvvm observablecollection

我已经开始学习WPF \ MVVM方法并且有点困惑。 我已经:

class ModelAAA {
    public List<Foo> Foos{get; protected set;}
    //..

    public void Boo()
    {
       //Some complex logic updating Foos
    }
}

class ViewModelAAA{

    private ModelAAA _modelAAA

    public ObservableCollection<Foo> Foos{get; protected set;}

    public void ViewModelAAA(ModelAAA modelAAA)
    {
        this._modelAAA = modelAAA;
        this.Foos = new ObservableCollection(modelAAA.Foos)
    }

    public void Boo()
    {
       this._modelAAA.Boo();
       //What should I do here?
    }
}

因此,如果我使用Boo视图模型方法,那么在ViewModel中更新集合的正确视图是什么。我的想法很少,但它们似乎都很丑陋。我应该每次都手动重新创建\ change viewModel Foos吗?正如我所强调的那样ObservableCollection不是像对象那样的包装。

P.S。我想在模型

中使用ObservableCollection将其白化

2 个答案:

答案 0 :(得分:0)

不,您不需要手动更改它,因为它是ObservableCollection,但您正在更改原始集合而不是可观察的集合。

要通知Observable的监听器,您需要对Observable本身采取行动。

示例:

public void Boo()
{
   this.Foos.Boo();

}

答案 1 :(得分:0)

您的模型不需要使用ObservableCollection,但必须通知您的ViewModel集合中发生了更改。

这会创建一个List的副本,这个副本确实是可观察的,但在此之后根本没有改变:

this.Foos = new ObservableCollection(modelAAA.Foos);

每次模型集合更改时,我都不建议创建新的ObservableCollection。而是在Model-Collection中实现INotifyCollectionChanged并正确处理Viewmodel中的事件。