数据上下文
Control.DataContext 属性描述了使用绑定时控件默认从何处取值。数据上下文通常在Window这样的顶级控件中赋值,它的子控件会自动继承数据上下文。
当使用MVVM模式时,数据上下文通常都是视图模型的实例。
如果你使用 Avalonia MVVM Application 模板创建应用,那么你将在 Program.cs 文件中看到如下代码:
private static void AppMain(Application app, string[] args)
{
var window = new MainWindow
{
DataContext = new MainWindowViewModel(),
};
app.Run(window);
}这段代码表明,当MainWindow创建时,一个新的MainWindowViewModel实例将会被创建出来,并赋值给窗体的DataContext属性。所有绑定都会默认绑定到这个实例的属性上。
<Window>
<Button Content="{Binding ButtonCaption}"/>
</Window>将会把Button的Content属性绑定到Window.DataContext.ButtonCaption上。
绑定数据上下文
绑定DataContext时, 绑定的源是父级控件的DataContext:
<Window>
<!-- 会将`DataContext`绑定到`Window.DataContext.Content -->
<StackPanel DataContext="{Binding Content}"/>
</Window>使用数据模板显示内容的控件会自动将控件的DataContext赋值给模板内部的控件。例如对于ContentControl:
<Window>
<ContentControl DataContext="{Binding Content}">
<ContentControl.ContentTemplate>
<DataTemplate>
<!-- 会将`Text`绑定到`Window.DataContext.Content.Header -->
<TextBlock Text="{Binding Header}"/>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
</Window>最后更新于
这有帮助吗?