MVVM-用于修饰WPF命令绑定标准

MVVM-用于修饰WPF命令绑定标准,wpf,design-patterns,mvvm,commandbinding,Wpf,Design Patterns,Mvvm,Commandbinding,我认为我对MVVM设计模型有很好的理解,但是我对WPF、命令绑定以及如何使用它们有一个认识 要将命令直接绑定到XAML,我们需要在ViewModel中实现ICommand接口。现在,ICommand接口是PresentationCore.DLL的一部分,如果我错了,请纠正我是WPF的一部分,而不是基本的.NET框架 ViewModel和Model的全部要点不就是它应该完全独立于UI吗?例如,如果我在ViewModel中实现ICommand并将其用作数据上下文以绑定来自XAML的命令,那么我的Vi

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

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

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

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

这对我来说有点奇怪,我是不是遗漏了什么?有没有其他方法可以让我的模型和ViewModel完全独立于UI和UI框架,但仍然能够使用XAML中的命令绑定


提前谢谢

MVVM的目的是让视图只是一个视图,而不是更多。将ICommand放入视图模型有助于实现这一点,因为它会将代码从视图中抽离。您将遇到的问题是,如果您必须访问视图中非依赖属性的内容,这意味着您无法绑定到它。

MVVM的目的是让视图只是一个视图,而不是更多。将ICommand放入视图模型有助于实现这一点,因为它会将代码从视图中抽离。您将遇到的问题是,如果您必须访问视图中非依赖属性的内容,这意味着您无法绑定到它。

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

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

在我看来,MVVM非常受WPF和Silverlight的欢迎,因为它自然适合WPF。XAML中的数据绑定概念允许使用单个属性(DataContext)桥接视图和视图模型。由于您的逻辑不再与控件绑定,因此可以获得更好的可测试性、设计代码分离和可维护性。您也可以在其他地方实现MVVM模式,但在WPF和Silverlight中,由于其数据和命令绑定支持,它非常容易实现。我在某个地方读到过这样一句话:不要盲目地接受模式。它们是为了让你的生活更简单,而不是在遵循它的同时给你带来更多的问题。对于Winforms,我认为有更好的模式,如果您专注于重用业务逻辑,请将它们从ViewModels中移出,以分离类,例如服务提供者或服务代理,并在Winforms和WPF应用程序之间共享它们

在我看来,MVVM非常受WPF和Silverlight的欢迎,因为它自然适合WPF。XAML中的数据绑定概念允许使用单个属性(DataContext)桥接视图和视图模型。由于您的逻辑不再与控件绑定,因此可以获得更好的可测试性、设计代码分离和可维护性。您也可以在其他地方实现MVVM模式,但在WPF和Silverlight中,由于其数据和命令绑定支持,它非常容易实现。我在某个地方读到过这样一句话:不要盲目地接受模式。它们是为了让你的生活更简单,而不是在遵循它的同时给你带来更多的问题。对于Winforms,我认为有更好的模式,如果您专注于重用业务逻辑,请将它们从ViewModels中移出,以分离类,例如服务提供者或服务代理,并在Winforms和WPF应用程序之间共享它们

这在.NET 4.5中有所改变


这在.NET 4.5中有所改变


目前我唯一的解决方案是创建两个视图模型,一个是XXXViewModel,一个是XXXViewModelWPF,它继承了XXXViewModel并包含所有与ICommand相关的内容,然后XXXViewModelWPF类就变成了WPF only。有更好的办法吗?感谢目前我唯一的解决方案是创建两个视图模型,一个是XXXViewModel,一个是XXXViewModelWPF,它继承了XXXViewModel并包含所有与ICommand相关的内容,然后XXXViewModelWPF类就变成了WPF。有更好的办法吗?谢谢你的回答,所以我对MVVM模型的解释是错误的?ViewModel的目的不是从逻辑中抽象视图,而是从视图中删除所有代码。因此,如果我要将程序移动到Windows窗体,我必须重新编写视图模型和视图,而不仅仅是视图?我认为设计模式的目的是在UI设计发生变化时限制所需的返工?MVVM是专门为WPF设计的。我不知道