0

3つのボタン(ボタンA、B、C)のセットを備えたWPFアプリケーションウィンドウがあり、これらのボタンには、それぞれのビューモデルプロパティにバインドするコマンドがあります。

ボタンAをクリックすると、コマンドが実行されます(別のアプリケーションが起動されると、CommandCanExecute条件が更新されてfalseが返されるため、ボタンAは無効になります)。これにより、アプリケーションウィンドウが非アクティブ化されます。

ボタンBをクリックしてもコマンドは実行されませんが、代わりにウィンドウがアクティブになり、フォーカスがメインウィンドウに設定されます。コマンドを実行するには、ボタンBを2回クリックする必要があります。

必要な機能はボタンBをクリックすることです。アプリケーションウィンドウがアクティブでない間、アプリケーションウィンドウがアクティブになり、ボタンBに関連付けられたコマンドが実行されます。また、テスト目的でコマンドを削除してクリックハンドラーを追加しようとしましたが、これは同じ動作を示します。

この問題についてご協力いただければ幸いです。

4

2 に答える 2

1

ビューモデルでのコマンドロジックの実行を確認し、記事の後半で説明するDataContextCommandAdapterがボタンBに必要なコマンドをチェーン/呼び出しできるかどうかを確認します。

于 2012-11-06T13:36:00.433 に答える
0

コマンドバインディングの設定方法に関連する問題を特定しました。

解決策はCanExecuteChanged event、関連するCommandCanExecuteものがフレームワークによって再評価されるように起動することです。ICommand条件が変更されたときに、実装をデリゲートコマンドのメソッドに置き換えてPrism DelegateCommand呼び出しました。RaiseCanExecuteChanged()

Prism DelegateCommandを使用する前に、呼び出しCommandManager.InvalidateRequerySuggested()てみましたが、この場合は役に立ちませんでした。理由については十分に調査していませんが、すでに他のアプリケーションでPRISMを使用しているため、ここではDelegateCommandを使用するだけで十分です。

どうもありがとう

于 2012-11-06T16:46:10.977 に答える