【问题标题】:Xceed extended WPF datagrid select row with right click右键单击 Xceed 扩展的 WPF 数据网格选择行
【发布时间】:2018-02-06 14:05:06
【问题描述】:

我正在尝试将上下文菜单添加到 Xceed 扩展 WPF 数据网格。我能够显示上下文菜单和从菜单中触发的命令,但是右键单击一行不会将其设置为选定行,因此命令使用了错误的记录。

有没有办法改变所选项目的设置方式,以便可以通过右键单击更新?

<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>

【问题讨论】:

    标签: wpf contextmenu selecteditem right-click xceed-datagrid


    【解决方案1】:

    如果您设置每个 DataRowContextMenu 属性,您可以将当前项目作为命令参数传递给命令,而不是更改选择项目的方式:

    <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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2014-06-09
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多