問題タブ [canexecute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
474 参照

wpf - MVVM: コマンドと canExecute フラグ

動的フラグ canExecute を使用して最初のコマンドを使用しています。

ユーザーがデータを変更した場合にのみ有効にする必要がある保存コマンドがあります。

mod が作成されたときにアクションをバインドすることを考えていましたが、エラーが発生しました。これは正しい方法ではない可能性があります。

これは私の xaml です (ご覧のとおり、すべてのフィールドはレイアウト コントロールにあります)。

これが私の MainWindowVIewModel で、コマンドと canExceute を定義します。

そして、バインドされたユーザー コントロールのデータを変更する observableColletion を設定すると、次のようになります。

ListaImpianti は、次の方法で xaml にバインドされます。

ListaImpianti は次のように定義されます。

しかし、保存を有効にすることは決して呼び出されません..なぜですか?

ピエロ

0 投票する
1 に答える
782 参照

c# - ICommand バインディングを含むボタンをクリックしても、すぐに無効にならないのはなぜですか?

を含む単純な WPF プログラムがありICommandます。ボタンが期待どおりに有効/無効にならないことがわかりました。これは、不自然なコード例で最もよく説明できます。

このメソッドでは、 false を返すようにイベントExecute(object)をトリガーします。その呼び出しの後、ボタンがすぐに無効になることを期待していますが、呼び出しと2番目のシミュレートされた計算の間のある時点まで無効になりません。CanExecuteChangedCanExecute(object)RunWorkerAsync()

バックグラウンド ワーカーのRunWorkerCompleted(...)イベント ハンドラーで、再びCanExecuteChangedイベントをトリガーしますが、今回はCanExecuteChanged(object)true を返すようにします。この呼び出しの後、ボタンはすぐに有効になります。

CanExecuteChangedイベント をトリガーしても、ボタンがすぐに無効として表示されないのはなぜですか?

注 #1: 最初のシミュレートされた計算は、メインの GUI スレッドで実行する必要があるコードを表しています。この呼び出しを削除すると、ボタンは期待どおりに機能します。

CommandManager.InvalidateRequerySuggested()注 #2:コードにメソッドを強制的に呼び出すためのusing について読みましたCanExecute(object)。コメントで、これがうまくいかないことを示しました。を呼び出すOnCanExecuteChanged(...)ことを考えると、その提案はとにかく冗長だと思います。

0 投票する
1 に答える
111 参照

c# - 別の ViewModel のアクションから CanExecute を更新する

以下のコード スニペットでCreateBestPriceListCanExecute更新するには、どこでメソッドを実行すればよいですか?CanExecute

私のCreateBestPrice方法はデータベースを使用しており、バックグラウンドで実行されている自動データベース更新プログラムがあり、時々情報をアップロードします。私はCanExecuteその時に偽りである必要があります。それを行う別の方法はありますか?

0 投票する
1 に答える
21303 参照

c# - WPF で ICommand から CanExecute メソッドを使用する方法

インターフェイスCanExecuteからメソッドをどのように使用しますか?ICommand


私の例では、オブジェクトが保存可能な場合にのみ有効にする SaveCommand があります。Savebutton の XAML コードは次のようになります。

これは私の保存クラスのコードです:

ViewModel の保存プロパティは次のようになります。

この構成は機能しませんでした。isSaveable が true の場合、ボタンはそれ自身を有効にしません。

0 投票する
1 に答える
556 参照

c# - ApplicationCommand の CanExecute が更新されない

MenuItem-Click で ApplicationCommand を呼び出したいと思います。

ViewModel-Constructor で、バインディングを次のように初期化します。

コマンドを処理したいのですが、実行できません。それが常に真実であるべきだとしても。

また、init 関数の後にすべてのバインディングを更新しようとしました。

しかし、私の MenuItem は無効のままです。

ありがとうございました!

0 投票する
2 に答える
112 参照

c# - そのCanExecuteハンドラ内からMenuItemを取得する方法は?

関連する にアクセスするにはどうすればよいMenuItemですか? オンザフライで作成されているため、xaml ファイルの名前だけで使用することはできません。

0 投票する
0 に答える
87 参照

wpf - WPF - コマンドの canExecute が false を返す場合でも、メニュー項目を有効に保つ

デフォルトでは、コマンドの canExecute が false を返すと、メニュー項目は無効になります。この動作をオーバーライドすることは可能ですか? canExecuteに触れずにcanExecuteがfalseを返しても、メニュー項目を有効にしておく必要があります。メニュー項目の isEnabled を true に設定しても機能しませんでした。

0 投票する
2 に答える
132 参照

c# - 複数の要因に応じてWPF CanExecute

アプリケーションのメニューにCanExecuteパラメーターを使用する際にジレンマに直面しています。CommandBinding

状況は次のとおりです。アプリケーション自体は、作業モード、レビュー モードなどの特定のモードで実行できます。モードに応じて、一部のメニュー項目を有効または無効にする必要があります (したがって、実行可能または不可能)。

これまでに行ったことは、CanExecute の 4 つのイベント ハンドラーを作成することです。

一部のメニュー コマンドは両方のモードに共通であるため、一部は各モード専用です。

アプリケーションが開発されるにつれて、特定のメニュー コマンドをその時点で実行する必要があるかどうかを決定する要因が増えます。私が考えることができる解決策は次のとおりです。

  • イベントハンドラーにブールマルチバインディングを追加しましたCanExecuteが、このソリューションの例が見つかりませんでした.不可能だと思います.
  • さらに長い名前のイベントハンドラーを追加するCanExecuteと、実際にはコードが読みにくくなります
  • 「メニュー項目ごと」CanExecuteのイベントハンドラーを持ち、各イベントハンドラーのコードをいくつかのブール変数に基づいて、その結果を決定します

メニュー項目の有効化はイベント ハンドラーで実行できることは知っていますSubmenuOpenedが、多くのコマンドには もKeyGesture定義されています。

私の質問は次のとおりです。この場合のベスト プラクティスは何でしょうか。アプリケーションのロジック (コマンド実行の可用性) が保証され、コードの読みやすさも妥当なレベルに保たれますか?

ご提案ありがとうございます。