【问题标题】:WPF: Access parent DataTemplate from DataContextWPF:从 DataContext 访问父 DataTemplate
【发布时间】:2015-02-20 15:08:26
【问题描述】:

我有以下情况:

<DataTemplate DataType="{x:Type tra:Presenter}">
        <DockPanel>
            <GroupBox>

                    <ie:DifferentControl DataContext="{Binding LocationSelectorPresenter}" 
                    Visibility="{Binding PropertyOnTraPresenter, Converter={StaticResource boolToVis}}"/>

            </GroupBox>
        </DockPanel>
    </DataTemplate>

如何从拥有自己的 DataContext 的东西中访问 DataTemplate 的数据类型上的属性?

我尝试如下使用FindAncestor,但没有运气。 (这来自this similar question,但我想我错过了一些东西。)

Path=PropertyOnTraPresenter, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type tra:Presenter}}

我认为FindAncestor 在这里是错误的方法,因为DataTemplate 似乎不在祖先考虑的列表中。

System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried StackPanel (hash=61829898)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried ContentPresenter (hash=51997850)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried Grid (hash=51537092)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried GroupBox (hash=32646025)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried DockPanel (hash=63418642)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried ContentPresenter (hash=50027503)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried ContentPresenter (hash=37861722)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried AdornerDecorator (hash=8826739)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried Border (hash=26352004)
System.Windows.Data Warning: 73 :     Lookup ancestor of type tra:Presenter:  queried SimplifierDialog (hash=6690366)
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor.......

我还查看了this question,这似乎是我的问题,但我无法使解决方案适合那里,因为似乎不可能为 DataTemplate 提供x:Name

【问题讨论】:

  • FindAncestor 只查找控件树中的对象,但 datacontext-object 不存在。对我来说,尚不清楚您要达到的目标。 DataTemplate 用于“Presenter”类型,因此您拥有该类型的所有可用属性,为什么要向上走控制树?
  • 嗨 @Martin - ie:DifferentControl 上的 DataContext 阻止我访问 Presenter 中的变量 - 我相信。我刚刚想出了一个解决方法,我很快就会发布 - 也许我的问题可能会更有意义。不过,谢谢你的眼睛。

标签: wpf xaml datatemplate datacontext


【解决方案1】:

我发现可以从任何祖先访问数据上下文 - 而不仅仅是声明它的 DataTemplate。我认为这可能是我对 DataTemplate 工作原理的误解。

这完成了工作:

"{Binding DataContext.PropertyOnTraPresenter, 
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}, 
Converter={StaticResource boolToVis}}"

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 2015-06-27
    • 2015-07-01
    • 2010-10-12
    • 2016-01-19
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多