ContextMenu在视图模型中单击DataGrid

时间:2013-06-18 12:04:07

标签: wpf wpfdatagrid

我使用以下代码片段在视图模型中获取DataGrid的ContextMenu单击

代码段[XAML]

<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding GDCSource}" x:Name="dataGrid">
<DataGrid.ContextMenu>
<ContextMenu >
    <ContextMenu.Items>
        <MenuItem Header="Export To Excel" Command="{Binding ExportCommand}" CommandParameter="{Binding ElementName=dataGrid}"/>  
    </ContextMenu.Items>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>

代码段[C#]

private BaseCommand exportcommand;

    public BaseCommand ExportCommand
    {
        get
        {
            if (exportcommand == null)
                exportcommand = new BaseCommand(ExportCommandExcecuted);

            return exportcommand;
        }
    }

    public void ExportCommandExcecuted(object param)
    {
        var grid = param as GridDataControl;
    }

但我无法将Command参数作为DataGrid获取。您能否请一看,并提供在ViewModel中实现此dataGrid的建议。提前致谢

1 个答案:

答案 0 :(得分:0)

我不确定我是否应该告诉你如何执行此操作,因为如果你实际上是在破坏MVVM,我无法找出你想要这个功能的原因。

如果您没有使用MVVM,那么您可以尝试使用MenuItem,例如

<MenuItem Command="{Binding ExportCommand}"
          CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget}"
          Header="Export To Excel" />

如果你正在使用MVVM,

只是不要在VM中引用UI元素。您在VM中获得了ItemSource集合。提出一个简单的简单ICommand,您可以获得所需的所有数据,而无需将DataGrid发送到VM。