这是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集合只是一个属性 在Datagrid中;这个集合不符合逻辑(或视觉) 树,因此DataContext没有被继承,这导致了 没有什么可以约束的。
更新2: 关于DataGrid警告的好文章:http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您对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>
修改强>
显然the columns of a datagrid are not part of the Visual Tree 因此使用ElementName和RelativeSource将无法正常工作。 也许您应该将属性添加到列绑定的对象。