如何在MVVM中使用相同的ViewModel拥有多个视图?

Alf*_*fie 5 c# wpf mvvm

我是WPF和MVVM的新手,在尝试DataContext在两个单独的视图中设置我的ViewModel的同一个实例时遇到了一个问题.

这是因为:

<Window.DataContext>
    <local:ViewModel/>
</Window.DataContext>
Run Code Online (Sandbox Code Playgroud)

将为每个视图创建一个新的视图模型实例.

为了解决这个问题,我决定创建一个存储我使用的每个ViewModel的静态实例的类.然后在cs每个视图的文件中,我将从此DataContext静态类设置为适当的ViewModel.

这可行,但对于可能同时需要ViewModel的多个实例的大型程序而言似乎不是最佳选择.

有什么更好的方法来解决这个问题 - 是否有合理的方法可以使用ViewModel的同一个实例来拥有多个视图?

或者这种做法是不好的做法 - 我应该为每个ViewModel设计一个带有一个View的程序吗?

谢谢!

Fab*_*ous 6

您可以在App.xaml中实例化该视图模型,以便整个应用程序可以访问它.

<Application.Resources>
    <local:ViewModel x:Key="sharedViewModel" />
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

然后在您想要使用该datacontext的视图中,执行以下操作...

DataContext="{StaticResource sharedViewModel}"
Run Code Online (Sandbox Code Playgroud)