我使用以下代码片段在视图模型中获取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的建议。提前致谢
答案 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。