为什么添加双击命令会禁用我的数据网格?
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();
}
我有这个 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();
}