【发布时间】:2016-01-04 10:19:09
【问题描述】:
如何允许多个视图模型共享同一个模型?
我正在 ApplicationViewModel 中创建视图模型,该视图模型用于使用带有所选 VM 的 DataTemplate 在视图之间切换。
public ApplicationViewModel()
{
//Add pages
BasePageViewModels.Add("Home Page", new HomeViewModel());
BasePageViewModels.Add("Summary Page", new SummaryViewModel());
BasePageViewModels.Add("AddTestRun Page", new AddTestRunViewModel());
//some code here
CurrentBasePageViewModel = BasePageViewModels["Home Page"];
}
我希望能够从每个创建的 VM 中访问相同的 Data 类。 理想情况下,我会使用参数将 Data 类传递给每个 ViewModel,但这会导致在 XAML 中设置 DataContex 引发错误,因为 DataContext 没有可访问的构造函数。
更新
我在其他视图中设置 DataContext,如下所示:
<UserControl.DataContext>
<viewModels:SummaryViewModel/>
</UserControl.DataContext>
但这样做会创建一个新的 ViewModel 实例,而不是使用绑定到 CurrentBasePageViewModel 的实例。
【问题讨论】:
-
您是否考虑过拥有 ContentControl?
-
这就是我改变视图的方式。该窗口有一个侧边菜单和一个 ContentControl,其内容绑定到选定的 VM。
-
对不起,我没有仔细阅读帖子。您可以尝试跟随 - 或通过参数传递信息,或编写静态类或实现接口
-
或者您可以在加载到 currentBasePageViewModel 之前通过属性将参数从应用程序视图模型设置为基本页面视图模型
-
那我该如何设置DataContext呢?从视图的 XAML 中设置它会创建一个新的 VM 实例。