C# 在WPF(MVVM)中使模型静态是一种好的做法吗?

C# 在WPF(MVVM)中使模型静态是一种好的做法吗?,c#,wpf,mvvm,static,C#,Wpf,Mvvm,Static,假设应用程序中的一些(而不是全部)模型是静态的,并且被定义为BaseViewModel的成员,这样多个ViewModel(以及扩展的视图)可以通过点击它们继承的数据来访问完全相同的数据。这是一个非常基本的布局,其中两个派生类可以访问同一个模型: public class EmployeeModel { public string Name; public int Id; } public class BaseViewModel { private static Empl

假设应用程序中的一些(而不是全部)模型是静态的,并且被定义为BaseViewModel的成员,这样多个ViewModel(以及扩展的视图)可以通过点击它们继承的数据来访问完全相同的数据。这是一个非常基本的布局,其中两个派生类可以访问同一个模型:

public class EmployeeModel
{
    public string Name;
    public int Id;
}

public class BaseViewModel
{
    private static EmployeeModel employeeModel = new Employee Model();
    public EmployeeModel EModel 
    { 
        get { return employeeModel; } 
        set { employeeModel = value; } 
    }

    public BaseViewModel() {}
}

public class EmployeeViewModel : BaseViewModel
{
    public EmployeeViewModel() 
    {
        base.Emodel.Name = "";
    }
}

public class HomeViewModel : BaseViewModel
{
    public EmployeeViewModel()
    {
        base.Emodel.Name = "";
    }
}

最后,它完成了工作,因为相同的数据现在在多个视图中显示,没有问题。然而,这并不意味着没有一种我不知道的更合适的方式。由于我是WPF新手,我不得不问,“为MVVM模式创建一个静态模型是一个好的实践吗?”此外,这个实现可以优化吗?如果可以,如何优化?

我会说,这不是一个坏的实践。因此,在您使用model
static
时,使您的程序按预期运行,这是一个很好的实践

另一种方法是不声明此模型
static
,而是声明一些
static
模型持有者,它在请求时返回完全相同的实例,因此在不同的视图(如现在),您将看到相同的模型以不同的方式呈现


希望这能有所帮助。

我认为这不是一个好的做法。你应该。如果您希望所有视图共享一个显示一些员工信息(可能是当前登录的员工)的通用UI,那么您谈论的是视图组合

。类似的东西使视图合成变得非常简单。在这种情况下,例如,您将拥有一个带有相应的
HeaderView
HeaderView
,并且
HeaderViewModel
将员工模型作为依赖项(例如注入构造函数)

然后,其他视图模型通过其构造函数将
HeaderViewModel
(或工厂)作为依赖项

如果您指的是以不同的方式显示同一个模型,那么只需通过构造函数将该模型作为依赖项传递给视图模型(假设该依赖项是必需的),并让视图模型直接公开该模型(违反LoD)或委托对该模型的调用(违反DRY原则)