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

时间:2015-08-13 14:59:09

标签: c# .net wpf xaml prism

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

1 个答案:

答案 0 :(得分:1)

由于某种原因,您的canExecuteMethod委托必须返回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();
}