为什么添加双击命令会禁用我的数据网格?

Why does adding a double click command disable my datagrid?

我有这个 XAML 代码:

<DataGrid>
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectionChanged">
      <prism:InvokeCommandAction Command="{Binding AddedSelectedClaimsCommand}" TriggerParameterPath="AddedItems" />
      <prism:InvokeCommandAction Command="{Binding RemovedSelectedClaimsCommand}" TriggerParameterPath="RemovedItems" />                                
    </i:EventTrigger>
    <i:EventTrigger EventName="MouseDoubleClick">
      <prism:InvokeCommandAction Command="{Binding ViewDetailsCommand}" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
  <DataGrid.ContextMenu>
    <ContextMenu >
      <MenuItem Header="View details" Command="{Binding ViewDetailsCommand}"/>
    </ContextMenu>
  </DataGrid.ContextMenu>
</DataGrid>

没有 MouseDoubleClick EventTrigger 也能正常工作。但是当我添加双击功能时,数据网格突然变灰并且无法再选择行。为什么?

您的 canExecuteMethod 委托必须出于某种原因返回 false,检查您的 ViewModel 并确保以下所有内容都适合您:

在您的命令初始化中,确保您设置了 canExecuteMethod 委托以及您的命令操作:

ViewDetailsCommand = new DelegateCommand(ExecuteViewDetailsCommand, 
    CanExecuteViewDetailsCommand);

然后您的逻辑将验证是否满足执行此命令的先决条件。最后,它将启用或禁用此命令的关联控件。

private bool CanExecuteViewDetailsCommand() {       
    return null != SelectedDetail;
}

如果命令成功通过前提条件测试,那么它可以安全地执行它的方法:

private void ExecuteViewDetailsCommand()
{    
    NavigateTo("DetailView",SelectedDetail);
}

你也应该有 SelectedDetail 属性 (read/write):

Detail selectedDetail;
public Detail SelectedDetail 
{
    get { return selectedDetail; }
    set { 
        SetProperty(ref selectedDetail, value); 
        RaiseCanExecuteEvents(); 
    }
}

注意上面的 RaiseCanExecuteEvents 方法调用,这是一种方便的方法,您可以在其中强制执行相关命令验证:

protected virtual void RaiseCanExecuteEvents()
{
    ViewDetailsCommand.RaiseCanExecuteChanged();
}