我需要帮助理解MainViewModel
在WPF应用程序中的实现。
例如,假设我有一个名为Tools的窗口,它由几个ViewModels
组成。我如何将该窗口的DataContext设置为代表所有ViewModels
的MainViewModel
?是否一个元素的DataContext,比如ListBox,将被绑定到MainViewModel
中相应的ViewModel
属性?
这里有几个选项:
- 在
App
类中重写OnStartup
方法,在那里你将创建一个窗口实例并在那里设置DataContext
。
protected override OnStartup(/*Some args here*/)
{
base.OnStartUp(/*Some args here*/);
var mainWindowViewModel = new MainWindowViewModel();
var mainWindow = new MainWindow
{
DataContext = mainWindowViewModel
};
MainWindow = mainWindow;
MainWindow.Show();
}
不要忘记删除App.xaml
文件中的StartupUri
属性,并在那里设置ShutdownMode=OnMainWindowClose
。
- 在窗口构造器中创建
MainWindowViewModel
实例
public class MainWindow : Window
{
public MainWindow()
{
DataContext = new MainWindowViewModel()
}
}
综上所述——在我看来,第一种方法更好,因为您可以在App
类中解决所有视图模型依赖关系,并将该逻辑与视图模型本身分离。
一个元素的DataContext,比如说一个ListBox,要绑定到
MainViewModel
中相应的ViewModel
属性吗?
是的。