wpf を使用して小さなゲームを作成しました。クリックできるセルのマトリックスがあります。クリック イベントは、DelegateCommand を通じて機能しています。問題は、canexecute メソッドが呼び出されないことです。最初にウィンドウのどこかをクリックする必要があります。これを使用していたので、コマンドクラスに問題はありませんでした:
event EventHandler ICommand.CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
私も CommandManager.InvalidateRequerySuggested(); を呼び出そうとしました。しかし、それも機能しません。クリックが許可されている現在のユーザーが私のPCのローカルユーザーである場合、セルはクリック可能です(マルチプレイヤーです)。そのため、ネットワークから「現在のプレイヤー」であるというメッセージを受け取った後、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; }
}
私のコマンド Can-Execute は次のようになります。
private bool CanMatrixClick(Object param)
{
return Main.PlayerViewModel.HasTurn;
}
この問題のクリーンで簡単な解決策はありますか? まだ試したことのないものは本当に見つかりませんでした。