MVVM-用于修饰WPF命令绑定标准
我认为我对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-用于修饰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的目的是让视图只是一个视图,而不是更多。将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中有所改变