В XAML я показываю все мои докладчики как элементы табуляции:
<TabControl.ContentTemplate>
<DataTemplate DataType="x:Type views:SmartFormAreaPresenter">
<views:SmartFormAreaView/>
</DataTemplate>
</TabControl.ContentTemplate>
Я заметил, что каждый элемент View имеет доступ к его соответствующим свойствам Presenter, даже если я никогда явно не говорю, например. View. DataContext= это и т.д.
Где установлен DataContext? Это происходит магически с помощью DataTemplate?
public class SmartFormAreaPresenter : PresenterBase
{
#region ViewModelProperty: Header
private string _header;
public string Header
{
get
{
return _header;
}
set
{
_header = value;
OnPropertyChanged("Header");
}
}
#endregion
public SmartFormAreaPresenter(XElement areaXml)
{
Header = areaXml.Attribute("title").Value;
}
}
Вот представление, оно отображает Header
правильно, что говорит мне, что DataContext находится где-то:
<UserControl x:Class="TestApp.Views.SmartFormAreaView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DockPanel LastChildFill="True">
<TextBlock Text="{Binding Header}"/>
</DockPanel>
</UserControl>
Где установлен DataContext? Это происходит магически с помощью DataTemplate?
Да. Дерево визуализации DataTemplate
получает объект, который он представляет, через DataContext