Связывание с ElementName не работает
Вот 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
2 ответа
Привязка к DataGridColumn
за Header
абд Visibility
свойства нуждаются в особой обработке...
Видеть это...
Если вас интересует свойство Count объекта, на который ссылается DataContext, попробуйте использовать регулярную привязку данных:
<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 не будет работать. Возможно, вам следует добавить свойство к объекту, к которому привязан столбец.