Контекст данных
Свойство Control.DataContext
описывает, где элементы управления будут искать значения по умолчанию при привязке. Контекст данных обычно устанавливается для элементов управления верхнего уровня, таких как Window
, и дочерние элементы управления наследуют этот контекст данных.
При использовании шаблона MVVM контекст данных обычно будет экземпляром модели представления.
Если вы создали свое приложение с помощью шаблона приложения Avalonia MVVM, вы увидите что-то вроде этого в файле 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>
Связывает содержимое кнопки с Window.DataContext.ButtonCaption
.
Связывание DataContext
При привязке DataContext
в качестве источника привязки используется DataContext
родительского элемента управления:
<Window> <!-- Will bind `DataContext` to `Window.DataContext.Content --> <StackPanel DataContext="{Binding Content}"/> </Window>
Элементы управления, которые отображают содержимое на основе шаблона данных, автоматически устанавливают DataContext
для элементов управления в шаблоне. Например, ContentControl
:
<Window> <ContentControl DataContext="{Binding Content}"> <ContentControl.ContentTemplate> <DataTemplate> <!-- Will bind `Text` to `Window.DataContext.Content.Header --> <TextBlock Text="{Binding Header}"/> </DataTemplate> </ContentControl.ContentTemplate> </ContentControl> </Window>