0

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;
}

この問題のクリーンで簡単な解決策はありますか? まだ試したことのないものは本当に見つかりませんでした。

4

1 に答える 1

0

DelegateCommandイベントRaiseCanExecuteChanged()を発生させるために手動で呼び出すことができるメソッドがあります -CanExecute

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