2013-07-17 86 views
0

我是新來的wpf和交互性。我正嘗試執行基於某個事件觸發器的命令。在下面的代碼中,當doubleclick事件觸發時,CanExecute被調用並返回false,但仍然調用execute函數。這是invokecommandaction的默認行爲嗎?我會認爲,什麼時候可以執行返回false,執行不會被調用。確實invokecommandaction使用canexecute?

<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

是的,它確實使用canexecute,如果它是你的命令將不會被執行返回false。我測試了它。 – Nitesh

回答

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>