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



我有这个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也能正常工作。但是,当我添加双击功能时,数据网格突然变成灰色,无法再选择行。为什么?

你的canexecutemmethod委托必须返回false出于某种原因,检查你的ViewModel,并确保所有以下是为你的地方:

在你的命令初始化确保你设置canExecuteMethod委托以及你的命令操作:

ViewDetailsCommand = new DelegateCommand(ExecuteViewDetailsCommand, 
    CanExecuteViewDetailsCommand);

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

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

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

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

你应该有SelectedDetail属性在适当的地方(读/写):

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

注意上面的RaiseCanExecuteEvents方法调用,这是一个方便的方法,你可以强制相关的命令验证:

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

最新更新