为什么添加一个双击命令禁用我的数据网格
本文关键字:我的 数据 网格 数据网 命令 双击 添加 一个 为什么 | 更新日期: 2023-09-27 18:07:52
我有这个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();
}