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