我刚刚使用 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;
}
那么有没有人为这个问题提供干净简单的解决方案?我真的找不到任何我还没有尝试过的东西。