我尝试过模型-视图-视图模型的一些不同实现,并且经常遇到我不确定正确的继续方法的情况。我知道 MVVM 的目标之一是将视图与应用程序逻辑解耦,以便可以在没有视图的情况下测试逻辑。将逻辑放入不依赖于 View 的 ViewModel 中可以解决此问题。伟大的。如果模型可以通过可以模拟的方式与 ViewModel 解耦,那就更好了。
所以我的问题是,ViewModel 应该将模型与视图解耦吗?换句话说,通过 ViewModel 将 EntityFramework 实体暴露给 View 是否“可以”?例如,假设视图中有一个组合框,用户可以在其中选择地址的州。在AddressViewModel中,State应该作为真实的实体类型属性公开,还是应该作为StateViewModel公开?如果它应该是 StateviewModel 类型的属性,我不明白应该如何在 AddressViewModel.State setter 中管理底层模型(因为属性中设置的是 StateViewModel 而不是 State 实体)。
在我看来,这可以是任何一种方式,但似乎更一致的是从不将模型直接暴露给视图。想法?
您应该努力将模型与您的视图完全解耦,这应该是一个目标,您可能会实现它,也可能不会,但这仍然应该是您的目标。
具体来说,您的问题涉及常量列表(或多或少),这是一个简单的情况。如果我错了请纠正我,但你可能有一个States
表与一个code
and a name
对于每个州,然后您有另一个表,其中包含前一个州的外键。
在这种情况下,最好加载并创建StateViewModel
在应用程序初始化期间列出一次,然后处理外键值(状态code
可以说)在整个应用程序中而不是StateViewModel
对象本身。您应该使用的属性是SelectedValue
and SelectedValuePath
of the ComboBox
, 例子:
<ComboBox ItemsSource="{x:Static StateViewModel.StaticList}"
SelectedValue="{Binding StateForeignKey}"
SelectedValuePath="code"
DisplayMemberPath="name" />
这将填充ComboBox
with StateViewModel
对象(使用现在配置的上下文创建的),但会传递所选项目的code
属性到绑定字段StateForeignKey
,此外,ComboBox
将显示name
属性,以便人类可读。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)