当涉及列表/集合时,我无法理解如何应用MVVM模式.
假设MainModel有一些属性和方法,以及包含其他DetailModel对象的列表.该DetailModel对象可以被添加,删除或重新排序.
该MainView会显示相关的根模式中的一些控制,并有ListBox从列表填充.每个项目都有自己的子视图DetailModelView UserControl.
最后,有一个MainViewModel.这个属性由MainModel属性和方法支持,绑定到主视图,更改通知保持所有内容同步.(到目前为止,我对这种模式感到满意 - 如果有一些我缺少的基本内容,请更多说明这一点......)
在处理列表时,我感到困惑.我遇到了几个例子,其中MainViewModel简单地公开DetailModels了视图的列表,并且DetailModelViews直接绑定到模型.这个功能,但是有问题.它并不一贯遵循模式(不DetailViewModel存在),它促使我在我的细节模型中包含一些与UI相关的代码.我觉得MainViewModel应该公开一个DetailViewModelsUI 的列表来绑定,但我仍然坚持如何实现这样的事情!
应该如何管理两个列表(DetailModels和DetailViewModels)?我真的很困惑,因为我最初填充DetailViewModel列表,以及我应该如何处理添加,删除或更改项目的顺序,以保持它们同步!
Rac*_*hel 12
通常Models只不过是数据对象.它们不应包含任何代码来执行添加/删除列表中的项目等操作.这是ViewModel's工作.
在你的情况下,我会创建一个MainViewModel具有以下属性:
ObservableCollection<DetailViewModel> DetailsICommand AddDetailCommandICommand RemoveDetailCommand如果您的MainModel类是数据对象,您可以公开它,也可以从中公开它的属性MainViewModel.公开它的属性是"MVVM纯粹主义"方法,而暴露整个模型有时更实用.
您MainViewModel负责创建初始列表DetailViewModels,并负责添加/删除这些项目.例如,在PropertyChanged该事件MainViewModel.MainModel性质,它可能重建MainViewModel.Details的收集,以及CollectionChanged对事件的MainViewModel.Details属性将更新MainViewModel.MainModel.Details
你有一个单独的DetailModels列表和DetailViewModels列表是正确的.DetailViewModels列表应该是type的属性ObservableCollection<DetailViewModel>.您可以在设置模型时填充可观察列表(或者在构建时,如果将模型传递给ViewModel的构造函数).
private ObservableCollection<DetailViewModel> m_details;
public IEnumerable<DetailViewModel> Details
{
get { return m_details; }
}
Run Code Online (Sandbox Code Playgroud)
您可以订阅m_details.CollectionChanged.您可以在此处理模型中列表内容的重新排序.
我希望这有帮助.
| 归档时间: |
|
| 查看次数: |
13001 次 |
| 最近记录: |