c# - 在没有 DataContext 的情况下,我的 View 如何知道它的 Presenter?

标签 c# wpf xaml binding

在 XAML 中,我将我所有的演示者显示为选项卡项:

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

我注意到每个 View 都可以访问它各自的 Presenter 的属性,即使我没有明确说明View.DataContext = this 等

那么 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;

    }
}

这是 View ,它正确显示 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>

最佳答案

Where is the DataContext being set then? Does it happen magically with the DataTemplate?

是的。 DataTemplate 可视化树通过 DataContext

接收它代表的对象

关于c# - 在没有 DataContext 的情况下,我的 View 如何知道它的 Presenter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1231866/

相关文章:

c# - 以透明方式将图像从 WinForms 应用程序导出到 PowerPoint

javascript - 在 JavaScript 中编码 Base 64,在 C# 中解码 unicode

wpf - 如何使用 AvalonEdit 编辑 XML 文件

c# - 在 Windows Phone 中从 Parent 绑定(bind)到 ItemsPanelTemplate

c# - 我将 IDENTITY_INSERT 设置为 ON 但我收到一个 SqlException 说它已关闭

c# - 在 Windows 中访问和查询事件日志

c# - WPF MVVM自动GUI测试-代码覆盖率

c# - 具有不同方向的 WPF 虚拟化 TreeView 不虚拟化?

c# - 当 ContentPage 完成加载时如何获得通知

c# - 如何更改 TabbedPage 中的默认选定项?