Xceed расширенный WPF datagrid выберите строку с правой кнопкой мыши

Я пытаюсь добавить контекстное меню в расширенную сетку данных WPF Xceed. Я могу показать контекстное меню и команды запускаются из меню, но щелчок правой кнопкой мыши по строке не устанавливает ее в качестве выбранной строки, и поэтому команда использует неправильную запись.

Есть ли способ изменить способ установки выбранного элемента, чтобы его можно было обновить, щелкнув правой кнопкой мыши?

<xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource RecordsForList}}" SelectedItem="{Binding SelectedRecord}">
    <xcdg:DataGridControl.ContextMenu>
        <ContextMenu>
            <MenuItem Command="{Binding OpenCommand}" Header="Open" />
        </ContextMenu>
    </xcdg:DataGridControl.ContextMenu>
</xcdg:DataGridControl>

1 ответ

Решение

Вместо изменения способа выбора элемента можно передать текущий элемент в качестве параметра команды команде, если вы установите ContextMenu собственность каждого человека DataRow:

<xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource RecordsForList}}" SelectedItem="{Binding SelectedRecord}">
    <xcdg:DataGridControl.ItemContainerStyle>
        <Style TargetType="xcdg:DataRow">
            <Setter Property="Tag" Value="{Binding DataContext, RelativeSource={RelativeSource AncestorType=xcdg:DataGridControl}}" />
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Command="{Binding PlacementTarget.Tag.OpenCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                                  CommandParameter="{Binding}" Header="Open" />
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </xcdg:DataGridControl.ItemContainerStyle>
</xcdg:DataGridControl>

Другим вариантом было бы написать некоторый код в представлении, которое фактически выбирает элемент при щелчке правой кнопкой мыши, например:

<xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource RecordsForList}}"  SelectedItem="{Binding SelectedRecord}">
    <xcdg:DataGridControl.ContextMenu>
        <ContextMenu>
            <MenuItem Command="{Binding OpenCommand}" Header="Open" />
        </ContextMenu>
    </xcdg:DataGridControl.ContextMenu>
    <xcdg:DataGridControl.ItemContainerStyle>
        <Style TargetType="xcdg:DataRow">
            <EventSetter Event="PreviewMouseRightButtonDown" Handler="xgrid_PreviewMouseRightButtonDown" />
        </Style>
    </xcdg:DataGridControl.ItemContainerStyle>
</xcdg:DataGridControl>

private void xgrid_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    Xceed.Wpf.DataGrid.DataRow row = sender as Xceed.Wpf.DataGrid.DataRow;
    xgrid.CurrentItem = row.DataContext;
}
Другие вопросы по тегам