我问自己如何在以下场景中正确应用MVVM: 假设我有一个简单的Master-Detail数据,就像一个有0-n地址的人。 地址应显示在ListBox中,用户应该能够触发每个地址的certian操作。
所以我做的是创建一个返回人员模型和地址模型的VM。 问题是,我想在地址DataTemplate中创建按钮。但是为了使按钮工作,我需要一个由每个地址公开的命令,它可以绑定到按钮上的相应属性。
我的问题是,如果它真的是正确的方法来包装(在这种情况下)另一个对象中的每个地址,它暴露了必要的功能吗?我想避免我必须维护第二个地址视图模型列表,具体取决于第一个列表与模型对象的更改。
TIA 马丁
答案 0 :(得分:2)
这听起来像是正确的方法。
将UI直接绑定到Domain Model类总是很诱人,但经验表明,您可能总是在UI和域模型之间滑动ViewModel。这可以确保特定于UI的成员(例如您提到的ICommand属性)保留在UI中,并且不会入侵域模型。
在某些情况下,似乎域模型几乎适合,甚至它完全符合预期的UI。在这些情况下,抵制简单地将域模型直接绑定到View的冲动是非常困难的。
但是,特定于View的需求很可能会在稍后出现,然后您将面临必须在那时引入ViewModel - 而这通常是您没有时间的时候这样做。
如果您可以简单地说:“所有域对象都包装在ViewModel中,然后绑定到视图中,它还使您的应用程序架构更容易理解。”