0

我刚刚使用 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; }
    }

我的命令可以执行如下所示:

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

那么有没有人为这个问题提供干净简单的解决方案?我真的找不到任何我还没有尝试过的东西。

4

1 回答 1

0

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

private void SetTurn(TurnMessage message)
{
    CurrentPlayer = GetPlayer(message.PlayerID);
    YourCommand.RaiseCanExecuteChanged();
}
于 2013-02-17T17:18:55.270 回答