使用MVVM在WPF中的子ViewModel之间共享ViewModel属性

时间:2018-12-26 21:17:24

标签: c# wpf mvvm

我有一个通过MVVM light工具箱遵循MVVM模式的WPF应用程序。

我有一个父视图模型- ProjectViewModel ,其中包含3个子视图模型。 ProjectViewModel Project 对象保留为属性。子视图模型在 Project 对象的不同部分上运行。

项目是这样的:

public class Project
{
    string Prop11{get;set;}
    string Prop12{get;set;}

    string Prop21{get;set;}
    string Prop22{get;set;}

    string Prop31{get;set;}
    string Prop32{get;set;}
}

父级视图模型属于 UserControl 。 子视图模型属于 UserControl 中的tabcontrol的3个不同选项。每个选项都有其自己的视图。

每次创建用户控件时,也会创建父虚拟机,这又会创建子虚拟机。我将 Project 对象传递给子虚拟机,以便它们可以对它们对应的特定属性进行操作。因此,我通过运算符 new 创建子虚拟机,而不是在DI容器上解析它。我不喜欢

project = new Project();

tab1Vm = new PropertySet1ViewModel(project);
tab2Vm = new PropertySet2ViewModel(project);
tab3Vm = new PropertySet3ViewModel(project);

作为一个明显的解决方案,我看到了不要在子虚拟机之间拆分父虚拟机项目对象。

有人可以为这个问题提出一个或多或少的优雅解决方案吗?

1 个答案:

答案 0 :(得分:0)

我认为您解决问题的方式没有任何问题。另一个解决方案是使用“依赖注入”并将其作为singelton注入。否则,通过传递对构造函数的引用的解决方案就可以了。

相关问题