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

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

这是因为:

    

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

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

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

有什么更好的方法来解决这个问题 – 是否有使用ViewModel的相同实例的多个视图的声音方法?

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

谢谢!

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

    

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

 DataContext="{StaticResource sharedViewModel}" 

简单易用以及推荐的方法之一是实现ViewModelLocator。

Idea已经在ViewModelLocator类中定义了所有ViewModel,并在需要的地方访问ViewModel。 在不同的View中使用相同的ViewModel在这里不会有问题。

  public class ViewModelLocator { private MainWindowViewModel mainWindowViewModel; public MainWindowViewModel MainWindowViewModel { get { if (mainWindowViewModel == null) mainWindowViewModel = new MainWindowViewModel(); return mainWindowViewModel; } } private DataFactoryViewModel dataFactoryViewModel; public DataFactoryViewModel DataFactoryViewModel { get { if (dataFactoryViewModel == null) dataFactoryViewModel = new DataFactoryViewModel(); return dataFactoryViewModel; } } } 

App.xaml中

  xmlns:core="clr-namespace:MyViewModelLocatorNamespace"    

用法

  

参考: 所以问题代码从那里复制..因为我不能从我的项目中删除代码..