WPF Command-Canexecute-Revalidation

时间:2013-02-17 17:05:47

标签: c# wpf command

我刚刚用wpf写了一个小游戏。我可以点击一个单元格矩阵。点击事件正在通过DelegateCommand进行。问题是没有调用canexecute方法。我总是先点击窗口的某个地方。 我从来没有遇到过我的命令类问题,因为我正在使用它:

event EventHandler ICommand.CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

我也试过调用CommandManager.InvalidateRequerySuggested();但这也行不通。 如果允许单击它的当前用户是我的电脑的本地用户(它是多人游戏),则单元格是可点击的。所以我从网络收到消息后我调用了InvalidateRequerySuggested,我现在是“当前播放器”。

private void SetTurn(TurnMessage message)
{
    CurrentPlayer = GetPlayer(message.PlayerID);
    System.Windows.Input.CommandManager.InvalidateRequerySuggested();
}

这将产生这种影响:

    public bool HasTurn
    {
        get { return CurrentPlayer != null && CurrentPlayer.PlayerID == Player.PlayerID; }
    }

My Command Can-Execute看起来像这样:

private bool CanMatrixClick(Object param)
{
    return Main.PlayerViewModel.HasTurn;
}

有没有人为这个问题提供简洁明了的解决方案? 我真的找不到任何我没有尝过的东西。

1 个答案:

答案 0 :(得分:0)

DelegateCommand有方法RaiseCanExecuteChanged(),您可以手动调用它来触发CanExecute事件 -

private void SetTurn(TurnMessage message)
{
    CurrentPlayer = GetPlayer(message.PlayerID);
    YourCommand.RaiseCanExecuteChanged();
}