我有一个问题:在 MVVM 中创建 ViewModel 的最佳位置在哪里以及如何创建?
1)在 App.xaml.cs 中创建一次作为静态字段,然后通过 App 使用它?
2) 当我导航到这个页面时,总是在 Page.cs 中创建新的 ViewModel?
3) 其他选项
我有一个问题:在 MVVM 中创建 ViewModel 的最佳位置在哪里以及如何创建?
1)在 App.xaml.cs 中创建一次作为静态字段,然后通过 App 使用它?
2) 当我导航到这个页面时,总是在 Page.cs 中创建新的 ViewModel?
3) 其他选项
在 MVVM 中,ViewModel是应用程序。这意味着我通常有一个启动 ViewModel 作为我的应用程序的入口点,我通常在 App.xaml.csOnStartup
代码中创建它的一个实例
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var app = new ShellView();
var context = new ShellViewModel();
app.DataContext = context;
app.Show();
}
每隔一段时间,我就有一个应用程序会在启动窗口的构造函数中创建 ViewModel,但这并不是真正的首选,因为这意味着如果我有任何启动逻辑,我也必须将它放在 View 的代码隐藏中,而且我不喜欢在我的视图层中混合应用程序逻辑。
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ShellViewModel();
}
}
不管你怎么做,请记住,当使用 MVVM 时,你的 ViewModel 是你的应用程序,而不是你的 View,所以通常你的 ViewModel 以某种方式连接到启动 ViewModel。视图只是用户与您的应用程序(ViewModel)交互的一种用户友好的方式。
有不同的方法可以做到这一点,取决于你的想法。
我个人总是有一个类旨在创建我需要的所有对象,在App.xaml.cs
. 该类基本上会在显示启动画面时执行那些耗时的启动过程。我在这里创建视图和视图模型并链接它们
这使我只有一个点来创建所有这些 View-to-ViewModel 链接,即使我添加/删除某些内容,我也可以轻松地回到它。
我不喜欢在每个视图的构造函数中初始化 viewModel 的方法。假设您的项目中有 15 个视图,如果您想检查所有 ViewModel 初始化,您将有 15 个不同的文件可供浏览。
这是我对此的谦虚参与=)
您可以使用依赖注入并像这样创建它(假设您正在使用一些 DI 容器):
public partial class YourView : UserControl
{
public YourView (IYourViewModel viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
}
}