Передать привязку к подклассу DataGridTextColumn - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть сетка данных, и я ищу настраиваемое контекстное меню для некоторых столбцов. У меня следующее работает правильно

<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, она никогда не достигается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...