gpt4 book ai didi

.net - EF4 + MVVM - 在 ViewModel 中公开实体?

转载 作者:行者123 更新时间:2023-12-04 14:51:54 26 4
gpt4 key购买 nike

我玩过一些不同的 Model-View-ViewModel 实现,并且一直遇到我不确定正确方法的情况。我知道 MVVM 的目标之一是将 View 与应用程序逻辑分离,以便可以在不存在 View 的情况下测试逻辑。将逻辑放在不依赖于 View 的 ViewModel 中可以解决这个问题。伟大的。如果 Model 可以与 ViewModel 解耦,从而可以模拟它,那就更好了。

所以我的问题是,ViewModel 是否应该将 Model 与 View 分离?换句话说,通过 ViewModel 将 EntityFramework 实体暴露给 View 是否“可以”?例如,假设 View 中有一个组合框,用户可以在其中选择地址的州。在 AddressViewModel 中,State 应该作为真实的实体类型属性公开,还是应该作为 StateViewModel 公开?如果它应该是 StateviewModel 类型的属性,我不明白应该如何在 AddressViewModel.State setter 中管理底层模型(因为在属性中设置的是 StateViewModel 而不是 State 实体)。

在我看来,这可能是任何一种方式,但似乎更一致的是从不将模型直接暴露给 View 。想法?

最佳答案

您应该努力将模型与您的 View 完全分离,这应该是一个目标,您可能会实现它,也可能不会,但这仍然应该是您的目标。

具体来说,您的问题涉及常量列表(或多或少),这是一个简单的案例。如果我在这里错了,请纠正我,但你可能有一个 States带有 code 的表和 name对于每个州,然后你有另一个表与前者的外键。

在这种情况下,最好加载并创建 StateViewModel在应用程序初始化期间列出一次,然后在整个应用程序中处理外键值(状态 code)而不是 StateViewModel对象本身。您应该使用的属性是 SelectedValueSelectedValuePathComboBox , 例子:

<ComboBox ItemsSource="{x:Static StateViewModel.StaticList}"
SelectedValue="{Binding StateForeignKey}"
SelectedValuePath="code"
DisplayMemberPath="name" />

这将填充 ComboBoxStateViewModel对象(使用现在处理的上下文创建),但将传递所选项目的 code属性到绑定(bind)字段 StateForeignKey ,另外, ComboBox将显示 name属性,以便它是人类可读的。

关于.net - EF4 + MVVM - 在 ViewModel 中公开实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com