Как мой View узнает о своем Presenter без DataContext? - PullRequest
2 голосов
/ 05 августа 2009

В XAML все мои докладчики отображаются как элементы вкладки:

<TabControl.ContentTemplate>
    <DataTemplate DataType="x:Type views:SmartFormAreaPresenter">
        <views:SmartFormAreaView/>
    </DataTemplate>
</TabControl.ContentTemplate>

Я заметил, что у каждого View есть доступ к его соответствующим свойствам Presenter, даже если я прямо не скажу, например, Просмотр. 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>

1 Ответ

2 голосов
/ 05 августа 2009

Где тогда устанавливается DataContext? Это происходит волшебным образом с DataTemplate?

Да. Визуальное дерево DataTemplate получает объект, который оно представляет через DataContext

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...