WPF复合Windows和ViewModels

Car*_*s00 5 .net c# data-binding wpf mvvm

我有一个Window包含很少的WPF UserControls,那些控件包含另一个.现在,如何ViewModel为这个窗口创建以及绑定它的最主要方式是什么.

我确实希望首先需要ViewModel为每个子控件创建一个.

Zeb*_*ebi 4

有几种方法可以做到这一点。

注入虚拟机

我会推荐这个方法。

如果您的窗口是在App类中创建的,例如

var window = new MyWindow();
window.Show();
Run Code Online (Sandbox Code Playgroud)

我会在显示窗口之前分配虚拟机:

var window = new MyWindow();
window.DataContext = GetDataContextForWindow();
window.Show();
Run Code Online (Sandbox Code Playgroud)

如果您的某个控件需要自己的视图模型,请在创建控件实例时分配虚拟机。

数据绑定

如果要设置控件的 VM,可以将该DataContext属性绑定到周围 VM 提供的 VM 实例。

<Controls:MyControl DataContext={Binding MyControlsVm} />
Run Code Online (Sandbox Code Playgroud)

代码隐藏

您可以使用后面代码中的 init 方法来设置 VM,例如

public MyWindow()
{
    InitializeComponent();
    DataContext = CreateViewModel;
}
Run Code Online (Sandbox Code Playgroud)

如果您不想为主页创建虚拟机,您可以使用一个技巧:

public MyWindow()
{
    InitializeComponent();
    DataContext = this;
}
Run Code Online (Sandbox Code Playgroud)

并只需使用类背后的代码作为VM。