在C#wpf mvvm的ViewModel类方法中有一个Window(View)参数是否正确?
问题描述:
可以说,我有以下类一个WPF项目:在C#wpf mvvm的ViewModel类方法中有一个Window(View)参数是否正确?
//Representing the View:
class SomeWindow:Window
{
//...
}
class SomeWindowViewModel
{
//...
SomeWindow window;
public void SomeMethod(ref SomeWindow window)
{
//...
}
}
是否正确有SomeWindow类的引用在SomeWindowViewModel类,如果我想使用像MVVM的架构?
我问这是因为我有一些代码写在WindowsForm中,我不得不在wpf mvvm中重写它,但应用程序的后端有很多对各种窗体引用的引用,它不是'我写的。据我所知,ViewModel一定不知道视图的任何内容。
答
简短的回答:
号视图可以引用视图模型视图模型,但不应该引用视图。不要在wpf中重写你的winforms。看看DataTemplate,行为和绑定的东西。
答
不,您应该避免View和View-Model之间的那种耦合。
有关MVVM的美妙之处之一是能够设计一个虚拟机,然后可以被多个不同的视图使用 - 或者根本没有视图。
通过不添加对具体的引用查看虚拟机,确保您能够完成上述语句。
这并不意味着您被禁止与虚拟机的视图交互;实际上虚拟机的责任恰恰就是为了弥合模型和视图之间的交互。
有很多方法可以做到这一点,它的确有关于寻找适合您的口味。事件,有一个调解员,有一个视图管理器注入虚拟机等。
将WinForms移植到WPF MVVM是具有挑战性的。这是一种完全不同的工作方式,重新设计当然是必要的。
祝您好运!
简短回答:否 – blindmeis
您已回答了您自己的问题。这正是MVVM模式试图避免的紧密耦合。如果您详细说明了您要完成的任务,则可以通过MVVM-y的方式得到一些答案,以便完成相同的任务。 –