定义 DataContext

要在 WPF 中使用绑定,你需要定义 DataContext 。DataContext 告诉绑定默认情况下从哪里获取数据。

<Window x:Class="StackOverflowDataBindingExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:StackOverflowDataBindingExample"
        xmlns:vm="clr-namespace:StackOverflowDataBindingExample.ViewModels"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <vm:HelloWorldViewModel />
    </Window.DataContext>
    ...
</Window>

你也可以通过代码隐藏设置 DataContext,但值得注意的是 XAML IntelliSense 有点挑剔:必须在 XAML 中为 IntelliSense 设置强类型 DataContext,以建议可用于绑定的属性。

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new HelloWorldViewModel();
    }
}

虽然有一些框架可以帮助你以更灵活的方式定义 DataContext(例如 MVVM Light 有一个使用控制反转的 viewmodel 定位器 ),但是为了本教程的目的,我们使用快速和脏的方法。

你可以为 WPF 中的几乎任何可视元素定义 DataContext。DataContext 通常从可视树中的祖先继承,除非它已被显式覆盖,例如在 ContentPresenter 中。