我有一个通过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);
作为一个明显的解决方案,我看到了不要在子虚拟机之间拆分父虚拟机项目对象。
有人可以为这个问题提出一个或多或少的优雅解决方案吗?
答案 0 :(得分:0)
我认为您解决问题的方式没有任何问题。另一个解决方案是使用“依赖注入”并将其作为singelton注入。否则,通过传递对构造函数的引用的解决方案就可以了。