我是wpf和互动的新手。我试图基于某些事件触发器执行命令。在下面的代码中,当doubleclick事件被触发时,调用CanExecute并返回false但仍然调用execute函数。这是invokecommandaction的默认行为吗?我认为,当执行返回false时,不会调用execute。
<UserControl x:Class="..."
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Path=DisplayReportCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
...
答案 0 :(得分:1)
是的,它会使用canexecute,如果返回false,命令将不会被执行。我已经发布了一个代码示例。
以下是ViewModel类中的命令
RelayCommand _showMessageCommand;
public ICommand ShowMessageCommand
{
get
{
if (_showMessageCommand == null)
{
_showMessageCommand = new RelayCommand(param => this.ShowMessage(), param => this.CanShowMessage);
}
return _showMessageCommand;
}
}
public void ShowMessage()
{
MessageBox.Show("Nitesh");
}
private bool CanShowMessage
{
get
{
return false; // Set to true to execute the command
}
}
这就是你将如何在XAML中使用它
<Button Content="Nitesh">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding ShowMessageCommand}" ></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>