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