У меня есть этот DevExpress GridControl, который динамически создается с помощью CellTemplateSelector. Один из столбцов GridControl определяется шаблоном DataTemplate, который выглядит следующим образом:
<DataTemplate x:Key="NameComboColumnTemplate">
<ContentControl>
<dxg:GridColumn
x:Name="GridColumnName"
FieldName="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).FieldName, RelativeSource={RelativeSource Self}}"
Header="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Header, RelativeSource={RelativeSource Self}}"
Width="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Width, RelativeSource={RelativeSource Self}}">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:ComboBoxEdit
IsTextEditable="False"
SelectedItem="{Binding RowData.Row.SelectedCylinderName, Mode=TwoWay}"
ItemsSource="{Binding RowData.Row.NameList, Mode=TwoWay}">
<dxe:ComboBoxEdit.ItemContainerStyle>
<Style TargetType="dxe:ComboBoxEditItem">
<Setter Property="dxb:BarManager.DXContextMenu">
<Setter.Value>
<dxb:PopupMenu>
<dxb:BarButtonItem
x:Name="BarButtonItemName"
Content="Delete"
Command="{Binding DeleteNameCommand}"
CommandParameter="{Binding}"/>
</dxb:PopupMenu>
</Setter.Value>
</Setter>
</Style>
</dxe:ComboBoxEdit.ItemContainerStyle>
</dxe:ComboBoxEdit>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</ContentControl>
</DataTemplate>
Существует класс DataGridRow, который содержит свойства для ОДНОЙ строки данных GridControl. Этот класс также содержит команду, определенную как
public ICommand DeleteNameCommand => new DelegateCommand<object>(obj => DeleteName(obj));
private void DeleteName(object obj)
{
// the obj parametercontains the text present on the ComboBoxEdit list item that was
// right-clicked to display the context menu.
// Delete the name from the list here
}
Как показано выше, свойства ComboBoxEdit SelectedItem и ItemsSource связаны со свойствами DataGridRow, доступ к которым осуществляется через свойство RowData.Row , а также с помощью DeleteNameCommand также доступен через свойство RowData.Row .
Когда пользователь щелкает стрелку вниз ComboBoxEdit, отображается список имен, а когда пользователь щелкает правой кнопкой мыши имя списка, отображается контекстное меню. Так как PopupMenu / BarButtonItem не является частью дерева визуалов, как бы я связал свойство BarButtonItem Command со свойством RowData.Row, доступным в ComboBoxEdit? ... и как я могу передать текст элемента списка ComboBoxEdit, по которому щелкнули правой кнопкой мыши, как значение CommandParameter ?
Любые указатели в правильном направлении очень ценятся.