在你的頭控件模板:
<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
}
}