我刚刚用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;
}
有没有人为这个问题提供简洁明了的解决方案? 我真的找不到任何我没有尝过的东西。
答案 0 :(得分:0)
DelegateCommand
有方法RaiseCanExecuteChanged()
,您可以手动调用它来触发CanExecute
事件 -
private void SetTurn(TurnMessage message)
{
CurrentPlayer = GetPlayer(message.PlayerID);
YourCommand.RaiseCanExecuteChanged();
}