我已经开始学习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
将其白化
答案 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中的事件。