gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:28 25 4
gpt4 key购买 nike

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

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

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

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

哪种方式都好(在这种情况下,可能有什么理由更喜欢一种方式)还是一种方式违反了 MVVM 规则?

最佳答案

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

Start from the Main Window View, have its ViewModel be instantiated by some means which again instantiates the Model it represents. This puts the View / GUI in the "operating" position.

然后 View 模型成为 View 的 DC。 View 到 ViewModel 应该是 1:1。

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

我的 ViewModel 构造函数实际上只包含一个参数,用于基于接口(interface)传递包含特定于 View 的回调的类。

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

ViewModel 实例具有我需要能够访问的模型实例。支持 View 的 vm 应该负责实例化这些 View ,否则您的单元测试将因外部依赖性(您需要通过 ctor 传入的模型实例)而受到影响。

关于c# - C# WPF MVVM 应用程序的启动顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33310398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com