定义 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 中。