【发布时间】:2010-09-08 16:03:43
【问题描述】:
我们正在设计一个 WPF / MVVM 应用程序,允许用户搜索和操作联系人记录。
我们有一个 MainViewModel,它包含一个可观察的 ContactViewModel 对象集合,每个对象都包装了一个从我们的业务层返回的 Contact 实体。 UI 将它们显示在一个列表中,其中 SelectedItem 属性绑定到 MainViewModel 上的相应 SelectedContact 属性。
我们还将有一个按钮或其他东西,其中命令绑定到 MainViewModel 公开的“ProcessContact”ICommand。
ProcessContact 需要获取选定的联系人并对其进行处理,这并不重要。
我的问题是:获取由所选 ContactViewModel 包装的基础 Contact 对象的正确方法是什么?我可以在我的视图模型上公开一个 Contact 属性,但这意味着视图可能会直接绑定到模型之外的属性。
我发现自己传递了很多 ViewModel 实例,当我真正想要的是它所包装的实体时,这感觉不对。
我是否遗漏了一些明显的东西?
编辑:同事提出的一些建议:
将实体公开为 ViewModel 上的受保护属性,这将停止视图绑定到它(假设视图类位于单独的程序集中)
完全停止尝试访问模型。如果我们想以某种方式处理底层实体,我们调用 ViewModel 上的方法。在我的示例中,我们可能有一个关闭 ContactViewModel 的 .Process 方法。 (‘SelectedContact.Process()’)
第二个选项对我来说是一个更好的解决方案,但不确定我们是否应该将这么多逻辑放入 ViewModel(但如果没有,那么在哪里?)
【问题讨论】: