В вашем шаблоне управления заголовком:
<Grid>
<Grid.Resources>
<local:DataGridColumnBindingHelper x:Key="DataGridColumnBindingHelper"
ElementInColumn="{Binding ., RelativeSource={RelativeSource TemplatedParent}"
Items={Binding MyCollection} />
</Grid.Resources>
<TextBlock Text="{Binding CurrentItem, Source={StaticResource DataGridColumnBindingHelper}}"/>
</Grid>
Внутри класса DataGridColumnBindingHelper:
private static void OnElementInColumnPropertyChanged(DataGridColumnBindingHelper self, FrameworkElement oldValue, FrameworkElement newValue)
{
var column = DataGridColumn.GetColumnContainingElement(newValue);
var dataGrid = newValue.GetVisualAncestors().OfType<DataGrid>().FirstOrDefault();
if (dataGrid != null)
{
var columnIndex = dataGrid.Columns.IndexOf(column);
self.CurrentItem = self.Items[columnIndex];
}
}
Обратите внимание, что привязка к MyCollection, вероятно, не будет работать должным образом.
Вы можете использовать пользовательское присоединенное свойство, чтобы прикрепить желаемую коллекцию к столбцу, в котором она определена в XAML, и затем прочитать его здесь следующим образом (в DataGridColumnBindingHelper):
private static void OnElementInColumnPropertyChanged(DataGridColumnBindingHelper self, FrameworkElement oldValue, FrameworkElement newValue)
{
var column = DataGridColumn.GetColumnContainingElement(newValue);
var dataGrid = newValue.GetVisualAncestors().OfType<DataGrid>().FirstOrDefault();
if (dataGrid != null)
{
var columnIndex = dataGrid.Columns.IndexOf(column);
var items = DataGridColProperties.GetItems(column); // read attached property
self.CurrentItem = items[columnIndex]; // you do not need the Items property in this case
}
}