Wpf 使用ElementName绑定无效

Wpf 使用ElementName绑定无效,wpf,binding,Wpf,Binding,以下是XAML: <DataGrid Grid.Column="0" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Columns}" x:Name="ColumnsGrid" RowHeaderWidth="0"> <DataGrid.Columns&g

以下是XAML:

<DataGrid Grid.Column="0"  AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Columns}"
              x:Name="ColumnsGrid" RowHeaderWidth="0">
        <DataGrid.Columns>
            <DataGridTextColumn Width="*" Binding="{Binding Path=Header}" 
                                Header="{Binding ElementName=ColumnsGrid, Path=DataContext.Count, StringFormat=Columns ({0}), diag:PresentationTraceSources.TraceLevel=High}"/>
        </DataGrid.Columns>  
    </DataGrid>

绑定返回错误:System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement

我错过了什么

更新:

答案如下:

这里发生了什么?Columns集合只是一个属性 在数据网格中;此集合不在逻辑(或可视)中 树,因此不会继承DataContext,这会导致 没有什么可约束的

更新2:
关于DataGrid警告的好文章:

如果您对DataContext中引用的对象的Count属性感兴趣,请尝试使用常规数据绑定:

<DataGrid Grid.Column="0"  AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Columns}"
          x:Name="ColumnsGrid" RowHeaderWidth="0">
    <DataGrid.Columns>
        <DataGridTextColumn Width="*" Binding="{Binding Path=Header}" 
                            Header="{Binding Path=Count, StringFormat=Columns ({0}), diag:PresentationTraceSources.TraceLevel=High}"/>
    </DataGrid.Columns>  
</DataGrid>

编辑

显然 因此,使用ElementName和RelativeSource将不起作用。
也许您应该将属性添加到列绑定到的对象。

绑定到
DataGridColumn
上对于
标题
abd
可见性
属性需要特殊处理

看这个


我认为
ElementName
在同一个元素中不起作用。答案是:>这里发生了什么?Columns集合只是Datagrid中的一个属性>;此集合不在逻辑(或可视)>树中,因此没有继承DataContext,这导致>没有可绑定的内容。另一个有趣的错误证明了WPF唯一的好处是编写教程,这项技术快把我逼疯了。我需要DataGrid的DataContext。@沃罗尼普-你试过RelativeSource祖先吗?@沃罗尼普-我在回答中补充说这对我也有用<代码>代理元素方法是一种非常好的黑客方法。:-)