很抱歉,如果已经提出这个问题,但我只是想确保我这样做。
如果我有一个domian对象,它上面有10个属性。我的主表单上有一个网格,我想要显示模型中的所有属性。
我创建了一个viewmodel来包装要在gridview中显示的域对象,但是我必须再次公开所有属性。我只是觉得通过视图模型直接绑定模型感觉很脏并且有点缺陷。
所以例如我真的不喜欢这个:
{Binding DomainObject.Property}
其中DomainObject是我视图模型的属性。
所以我的主要问题是,我是否应该通过视图模型公开模型上的所有属性,只是为了将它绑定到网格?
编辑:只是为了补充信息,domian对象是LINQ-To-SQL对象,所以我认为他们没有实现INotifyPropertyChanged,但我不确定。
答案 0 :(得分:3)
有些人会说没关系,有人说会这么做。我出现在后一阵营,原因如下:
是的,这是一项更多的工作,但我相信减少脱钩,维护问题,与设计师合作以及正确性是值得的。
PS。如果您发现自己处于这种情况中,可能会考虑ICustomTypeDescriptor的实现,它包装任何数据对象并使用更改通知公开其属性。这样,您的VM可以扩展此通用包装,直到您决定需要将属性拉出来进行格式化和验证等目的。
答案 1 :(得分:1)
如果您需要对属性进行更改通知,并且模型未实现INotifyPropertyChanged,则需要在ViewModel上创建新属性。否则,直接绑定到模型可能不是一个大问题:MVVM模式只是一个指导,如果需要你可以稍微弯曲规则......
答案 2 :(得分:0)
我认为这是个人喜好的问题。我碰巧认为将模型暴露在ViewModel的单个对象中是完全正常的。在ViewModel中重新创建Model的所有属性只会产生一堆额外的代码。
但是,只有在您的Model实现更改通知以便数据绑定有效时,这才有效。