c# - mvvm混淆模型和业务层连接

标签 c# wpf mvvm layer

所以我已经搜索了一段时间,我对模型部分的所有搜索都让我感到困惑。

我见过很多示例,其中 View 模型直接引用模型,然后设置模型的成员变量。然而,模型不应该是一个业务对象,以便业务层可以使用该数据进行计算吗?

所以...

1) 我是否应该在 UI 和业务层之间共享模型,以便两者都引用完全相同的对象(每个层不应该相互“隐藏”它们的内容,在这种情况下这不是最好的)。

http://blog.trivadis.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-50/1856.distributed_5F00_domain.png

2)或者模型应该在业务层。然后 UI 使用提供的业务接口(interface)从 View 模型调用以访问模型信息?这样模型本身就从 UI 中隐藏了。类似于选项 1 的图像,除了会有一些访问模型和服务的接口(interface)。

3) 或者 UI 确实有模型。但是我可以看到很多情况下,业务层需要此信息,从而导致制作看起来相对完全相同的多个模型。想象一下,下面的整个图片都位于 UI 中。然后是模型访问的模型下面的业务层。 http://rarcher.azurewebsites.net/Images/mvvm00.png

最佳答案

View 永远无法直接访问模型。 View 通过它的 DataContext 连接到 ViewModel。

ViewModel 可以直接访问模型,并且能够从模型中恢复值并将值设置到模型中以及调用方法以便发生操作。但是 ViewModel 不能直接访问 View,可能有 0 个、1 个或多个 View 实例都在查看同一个 ViewModel,它永远不会知道。

Model 不知道 ViewModel 或 View 的存在。因此,您可以在不同的项目中重用 Model 类,而无需依赖 WPF 甚至用户界面。

如何将模型附加到 ViewModel 取决于您。您可以将对模型的引用传递到 ViewModel 的构造函数中。或者提供一个单独的方法或属性,在构建 ViewModel 后调用。

为了完全分离,您将在 ViewModel 上公开与模型本身相同的属性列表(或者只是实际需要的子集)。 ViewModel 可以连接到 INotifyPropertyChanged 接口(interface)的 PropertyChanged 事件中,该接口(interface)应该从 Model 中公开。当它看到更改时,它可以通过自己的属性和自己的 INotifyPropertyChanged 接口(interface)实现将更改传递给任何观察 View 。

关于c# - mvvm混淆模型和业务层连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356818/

相关文章:

wpf - 在 View 模型中验证 DateTime 属性

c# - WPF 调度程序性能(100-200 次更新/秒)

c# - wpf/mvvm - 如何制作一个组合框,从 mvvm 中的选定项目中设置特定值

c# - WPF 在异步等待模式中使用 MVVM 和 WCF

c# - 集成测试将数据库文件添加到我的测试项目。我该怎么做

c# - 从c#中的字符串中提取最后一个匹配项

c# - 字典值C#

c# - 消除代码隐藏中的 Storyboard Completed 处理程序

c# - 嵌套 UserControl 事件在 MVVM/WPF 场景中不适用于 EventTrigger/InvokeCommandAction

c# - 同步两个 RichTextBox 的滚动位置?