我的View如何知道没有DataContext的Presenter?

时间:2009-08-05 08:25:15

标签: c# wpf xaml binding

在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 个答案:

答案 0 :(得分:2)

  

然后设置DataContext在哪里?是否会在DataTemplate中神奇地发生?

是。 DataTemplate可视化树通过DataContext

接收它所代表的对象
相关问题