wpf - ViewModel 和用户界面项目位置

标签 wpf visual-studio mvvm

我正在编写一个 wpf 项目并使用 MVVM 范例,我想知道我是否应该在他们自己的项目中编写我的 View 模型类。

我能看到的优势是您的 UI 项目永远不必了解您的业务逻辑。 (没有引用)

但是,如果我想在我的 View 模型中使用 ICommand 接口(interface),我仍然需要对 PresentationCore 的引用,这可能表明我应该在我的 ui 项目中。

评论建议最受赞赏。

最佳答案

一旦您在 ViewModel 中引用了 PresentationCore(如果您想使用 ICommand,目前这是不可避免的),您就会将各种不受欢迎的 View 相关功能泄漏到您的 ViewModel 中。例如,MessageBox.Show,当您在单元测试中看到它被调用时,它就会明白为什么它不好。

要回答这个问题,是的,将您的 View 和 ViewModel 放在不同的项目中。我自己也想知道这一点,但在走上独立的项目路线后,我花了一段时间才意识到这一点,但它对让我坚持使用干净的 MVVM 解决方案非常有值(value),从中吸取的教训极大地改善了我的整体解决方案架构。这一切都是关于使用接口(interface)减少对不必要的程序集的依赖,如果需要,还可以使用适配器模式。一个例子是我的 View 项目作为入口点引用了 Ninject,但我不希望我的 ViewModel 有该引用。否则可能有人会直接使用 Ninject 静态内核。​​

关于ICommand,我不知道从4开始就只使用WPF的历史,但感觉MVVM是事后才想到的。我不确定为什么微软会把这个界面放在 PresentationCore 中。我希望在未来的版本中可以解决这个问题,为 ViewModel 层提供一个单独的程序集。

关于wpf - ViewModel 和用户界面项目位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1464277/

相关文章:

c# - 寻找替代太多属性(property)变更的方法

.net - 如何制作自定义 WPF 集合?

c# - 作为 TabItem 的用户控件

c# - 每个项目都应该使用单独的强名称 key (.snk) 进行签名吗?

c# - 剪刀石头布c#登场如何显示胜率?

c# - 如何使过载变得更简单

c# - DataGrid 和 DataTemplate 的数据绑定(bind)问题

c# - 如何在 WPF 多选项卡 UI 中使用模板?

visual-studio - 在 Visual Studio SQL 编辑器中,如何去掉方框?

c# - CUIT(编码的 UI 测试)+ MVVM——我现在必须开始命名我的所有控件吗?