WPF:从DataContext访问父DataTemplate

WPF:从DataContext访问父DataTemplate,wpf,xaml,datatemplate,datacontext,Wpf,Xaml,Datatemplate,Datacontext,我有以下情况: <DataTemplate DataType="{x:Type tra:Presenter}"> <DockPanel> <GroupBox> <ie:DifferentControl DataContext="{Binding LocationSelectorPresenter}" Visibility="{Bin

我有以下情况:

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

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

            </GroupBox>
        </DockPanel>
    </DataTemplate>
我认为
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.......

我还研究了,这似乎是我的问题相反,但我不能使解决方案适合那里,因为它似乎不可能给一个DataTemplate一个
x:Name

我发现datacontext可以从任何祖先访问,而不仅仅是它在其中声明的DataTemplate。我想这可能是因为我对数据模板的工作原理有误解

这起到了作用:

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

FindAncestor只查找控件树中的对象,但datacontext对象不在其中。对我来说,还不清楚你想要实现什么。DataTemplate是针对“Presenter”类型的,因此您拥有该类型的所有可用属性,为什么要访问controltree?Hi@Martin-ie:DifferentControl上的数据上下文阻止我访问
Presenter
中的变量-我相信。我刚刚想出了一个解决办法,我将很快发布——也许我的问题会更有意义。不过,谢谢你的眼睛。
"{Binding DataContext.PropertyOnTraPresenter, 
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}, 
Converter={StaticResource boolToVis}}"