C#WPF MVVM应用程序的启动顺序

时间:2015-10-23 19:52:10

标签: c# wpf mvvm

我现在要回到使用WPF + MVVM设计一些GUI应用程序,我现在发现它比我第一次遇到它时更容易理解。

然而,困扰我的一个问题是应用程序的启动。从我看来,有两种方法:

从主窗口视图开始,通过某种方式实例化其ViewModel,再次实例化它所代表的模型。这使View / GUI处于“操作”位置。

另一种方法是覆盖Application类中的OnStartup例程(John Smith在他的The MVVM-Design Pattern MSDN Article中这样做)并从创建模型开始,将其传递给ViewModel Contructor,将新创建的ViewModel分配给单独创建的View / Window的DataContext。

两种方式都可以(在这种情况下,可能是优先选择另一方的原因)还是违反MVVM规则?

1 个答案:

答案 0 :(得分:2)

你的第一种方法是正确的:

  

从主窗口视图开始,将其ViewModel实例化   一些手段再次实例化它所代表的模型。这就是   View / GUI处于“操作”位置。

然后,viewmodel成为View的DC。 View of ViewModel应该是1:1。

您希望每个类都能够使用尽可能少的依赖项进行实例化。

我的ViewModel ctors实际上只包含一个参数,用于根据接口传递包含View-Specific回调的类。

    Model m = null;
    IViewCallbacks cb;
    public MainViewModel(IViewCallbacks mainViewCallbacks)
    {
         this.cb = mainViewCallbacks;
         m = new Model();
    }

ViewModel实例包含我需要能够访问的模型的实例。支持视图的vm应该负责实例化这些,否则你的单元测试会受到外部依赖性(你需要通过ctor传递的模型实例)的影响。