У меня есть сетка данных, и я ищу настраиваемое контекстное меню для некоторых столбцов. У меня следующее работает правильно
<DataGridTextColumn Binding="{Binding Path=Column1ViewModel.Value}" Header="Column1">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<TextBlock Grid.Row="0" Grid.Column="0">Valuation Method Type:</TextBlock>
<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding Path=Column1ViewModel.Property1}" DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding Column1ViewModel.ValuationMethodTypeId}"></ComboBox>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
Но я не хочу повторять этот код для каждого из столбцов. В идеале у меня должен быть элемент управления, который наследуется от DataGridTextColumn, чтобы я мог просто сделать это:
<ContextMenuColumn Header="Column 1" CustomBinding="{Binding Path=Column1ViewModel" />
<ContextMenuColumn Header="Column 2" CustomBinding="{Binding Path=Column2ViewModel" />
etc
Я создал подкласс DataGridTextColumn, который имеет свойство зависимости с именем CustomBinding, но привязка не устанавливается. Я также не знаю, как связать элементы управления в пользовательском столбце, чтобы они читали из переданной привязки.
xaml для ContextMenuColumn будет очень похож на приведенный выше DataGridTextColumn xaml, хотя я не знаю, как будут работать привязки. Код-код имеет следующее:
public static readonly DependencyProperty CustomBindingProperty =
DependencyProperty.Register("CustomBinding", typeof(object), typeof(ContextMenuColumn), new PropertyMetadata(null, OnCustomBindingPropertyChanged));
private static void OnCustomBindingPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
}
public object CustomBinding
{
get { return GetValue(CustomBindingProperty ); }
set{ SetValue(CustomBindingProperty , value);}
}
Когда я устанавливаю точку останова в OnCustomBindingPropertyChanged, она никогда не достигается.