0

我认为我对 MVVM 设计模型有很好的理解,但是我对 WPF、命令绑定以及我们应该如何使用它们有意见。

要将命令直接绑定到 XAML,我们需要在 ViewModel 中实现 ICommand 接口。现在,ICommand 接口是 PresentationCore.DLL 的一部分,如果我错了,请纠正我是 WPF 的一部分,而不是基本的 .NET 框架。

ViewModel 和 Model 的全部意义不在于它应该完全独立于 UI 吗?例如,如果我在 ViewModel 中实现 ICommand 并将其用作数据上下文以绑定来自 XAML 的命令,那么我的 ViewModel 是否依赖于 WPF 框架(特别是 PresentationCore.Dll)。

我的意思是,如果我要尝试在 Windows 窗体环境中使用我的模型和视图模型,我将不得不引用 PresentationCore.DLL,即使我不应该需要它,因为我使用的是 Windows 窗体而不是 WPF 框架.

这对我来说似乎有点奇怪,我在这里错过了什么吗?是否有另一种方法可以让我的模型和 ViewModel 完全独立于 UI 和 UI 框架,但仍然能够在 XAML 中使用 Command 绑定?

提前致谢!

4

4 回答 4

1

MVVM 的目的是让视图只是一个视图,仅此而已。将 ICommands 放入视图模型有助于实现这一点,因为它将代码从视图中拉出。你会遇到问题的地方是如果你必须访问视图上不是依赖属性的东西,这意味着你不能绑定到它。

于 2012-07-14T06:20:48.953 回答
1

我也遇到过这种问题,但不是在 wpf 中,而是在 POCO 课程中。我所做的是在两个不同的程序集中创建了两个部分类。就像您在 VM 项目中创建一个不依赖于 presentationcore.dll 的部分类,并在另一个实现 ICommand 内容的程序集(例如 WPFVM)中创建其部分类。现在,对于 Winforms 的东西,只将 VM 项目引用添加到 View 项目,对于 WPF 的东西,将 VM 和 WPFVM 的引用添加到 View 项目。我希望这将有所帮助。

于 2012-07-14T06:34:33.977 回答
1

在我看来,MVVM 非常受 WPF、Silverlight 的欢迎,因为它自然适合它。XAML 中的数据绑定概念允许使用单个属性(即 DataContext)来桥接视图和视图模型。由于您的逻辑不再与控件相关联,因此您可以获得更好的可测试性、设计代码分离和可维护性。您也可以在其他地方实现 MVVM 模式,但在 WPF 和 Silverlight 中,由于它的数据和命令绑定支持,它很容易适应。我在某处读过,不要虔诚地接受模式。它们旨在使您的生活更简单,而不是在遵循它时给您带来更多问题。对于 Winforms,我认为有更好的模式,如果您专注于重用业务逻辑,

于 2012-07-14T06:54:11.133 回答
1

这在 .NET 4.5 比较中发生了变化

于 2013-03-13T10:37:55.697 回答