在C#wpf mvvm的ViewModel类方法中有一个Window(View)参数是否正确?

在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一定不知道视图的任何内容。

+3

简短回答:否 – blindmeis

+0

您已回答了您自己的问题。这正是MVVM模式试图避免的紧密耦合。如果您详细说明了您要完成的任务,则可以通过MVVM-y的方式得到一些答案,以便完成相同的任务。 –

简短的回答:

号视图可以引用视图模型视图模型,但不应该引用视图。不要在wpf中重写你的winforms。看看DataTemplate,行为和绑定的东西。

不,您应该避免View和View-Model之间的那种耦合。

有关MVVM的美妙之处之一是能够设计一个虚拟机,然后可以被多个不同的视图使用 - 或者根本没有视图。

通过不添加对具体的引用查看虚拟机,确保您能够完成上述语句。

这并不意味着您被禁止与虚拟机的视图交互;实际上虚拟机的责任恰恰就是为了弥合模型和视图之间的交互。

有很多方法可以做到这一点,它的确有关于寻找适合您的口味。事件,有一个调解员,有一个视图管理器注入虚拟机等。

将WinForms移植到WPF MVVM是具有挑战性的。这是一种完全不同的工作方式,重新设计当然是必要的。

祝您好运!