在MVVM中创建ViewModel的最佳位置

Ser*_*lyi 5 wpf virtual-machine mvvm viewmodel

我有一个问题:在MVVM中创建ViewModel的最佳位置在哪里?

1)在App.xaml.cs中创建一次作为静态字段,然后通过App使用它?

2)当我导航到这个页面时,总是在Page.cs中创建新的ViewModel?

3)其他选择

Rac*_*hel 10

在MVVM中,ViewModel 应用程序.这意味着我通常只有一个启动ViewModel,它是我的应用程序的入口点,我通常在App.xaml.cs OnStartup代码中创建一个这样的实例

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var app = new ShellView();
    var context = new ShellViewModel();
    app.DataContext = context;
    app.Show();
}
Run Code Online (Sandbox Code Playgroud)

每隔一段时间我就有一个应用程序将在启动窗口的构造函数中创建ViewModel,但这并不是首选,因为这意味着如果我有任何启动逻辑,我必须将它放在View后面的代码中,我不喜欢在我的View层中混合应用程序逻辑.

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new ShellViewModel();
    }
}
Run Code Online (Sandbox Code Playgroud)

无论您如何操作,请记住,在使用MVVM时,ViewModel是您的应用程序,而不是您的视图,因此通常您的ViewModel以某种方式连接到启动ViewModel.视图只是用户友好的方式,用户可以与您的应用程序(ViewModels)进行交互.