問題タブ [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.
wpf - MVVM: コマンドと canExecute フラグ
動的フラグ canExecute を使用して最初のコマンドを使用しています。
ユーザーがデータを変更した場合にのみ有効にする必要がある保存コマンドがあります。
mod が作成されたときにアクションをバインドすることを考えていましたが、エラーが発生しました。これは正しい方法ではない可能性があります。
これは私の xaml です (ご覧のとおり、すべてのフィールドはレイアウト コントロールにあります)。
これが私の MainWindowVIewModel で、コマンドと canExceute を定義します。
そして、バインドされたユーザー コントロールのデータを変更する observableColletion を設定すると、次のようになります。
ListaImpianti は、次の方法で xaml にバインドされます。
ListaImpianti は次のように定義されます。
しかし、保存を有効にすることは決して呼び出されません..なぜですか?
ピエロ
c# - ICommand バインディングを含むボタンをクリックしても、すぐに無効にならないのはなぜですか?
を含む単純な WPF プログラムがありICommand
ます。ボタンが期待どおりに有効/無効にならないことがわかりました。これは、不自然なコード例で最もよく説明できます。
このメソッドでは、 false を返すようにイベントExecute(object)
をトリガーします。その呼び出しの後、ボタンがすぐに無効になることを期待していますが、呼び出しと2番目のシミュレートされた計算の間のある時点まで無効になりません。CanExecuteChanged
CanExecute(object)
RunWorkerAsync()
バックグラウンド ワーカーのRunWorkerCompleted(...)
イベント ハンドラーで、再びCanExecuteChanged
イベントをトリガーしますが、今回はCanExecuteChanged(object)
true を返すようにします。この呼び出しの後、ボタンはすぐに有効になります。
CanExecuteChanged
イベント をトリガーしても、ボタンがすぐに無効として表示されないのはなぜですか?
注 #1: 最初のシミュレートされた計算は、メインの GUI スレッドで実行する必要があるコードを表しています。この呼び出しを削除すると、ボタンは期待どおりに機能します。
CommandManager.InvalidateRequerySuggested()
注 #2:コードにメソッドを強制的に呼び出すためのusing について読みましたCanExecute(object)
。コメントで、これがうまくいかないことを示しました。を呼び出すOnCanExecuteChanged(...)
ことを考えると、その提案はとにかく冗長だと思います。
c# - 別の ViewModel のアクションから CanExecute を更新する
以下のコード スニペットでCreateBestPriceListCanExecute
更新するには、どこでメソッドを実行すればよいですか?CanExecute
私のCreateBestPrice
方法はデータベースを使用しており、バックグラウンドで実行されている自動データベース更新プログラムがあり、時々情報をアップロードします。私はCanExecute
その時に偽りである必要があります。それを行う別の方法はありますか?
c# - WPF で ICommand から CanExecute メソッドを使用する方法
インターフェイスCanExecute
からメソッドをどのように使用しますか?ICommand
私の例では、オブジェクトが保存可能な場合にのみ有効にする SaveCommand があります。Savebutton の XAML コードは次のようになります。
これは私の保存クラスのコードです:
ViewModel の保存プロパティは次のようになります。
この構成は機能しませんでした。isSaveable が true の場合、ボタンはそれ自身を有効にしません。
c# - ApplicationCommand の CanExecute が更新されない
MenuItem-Click で ApplicationCommand を呼び出したいと思います。
ViewModel-Constructor で、バインディングを次のように初期化します。
コマンドを処理したいのですが、実行できません。それが常に真実であるべきだとしても。
また、init 関数の後にすべてのバインディングを更新しようとしました。
しかし、私の MenuItem は無効のままです。
ありがとうございました!
c# - そのCanExecuteハンドラ内からMenuItemを取得する方法は?
関連する にアクセスするにはどうすればよいMenuItem
ですか? オンザフライで作成されているため、xaml ファイルの名前だけで使用することはできません。
wpf - WPF - コマンドの canExecute が false を返す場合でも、メニュー項目を有効に保つ
デフォルトでは、コマンドの canExecute が false を返すと、メニュー項目は無効になります。この動作をオーバーライドすることは可能ですか? canExecuteに触れずにcanExecuteがfalseを返しても、メニュー項目を有効にしておく必要があります。メニュー項目の isEnabled を true に設定しても機能しませんでした。
c# - 複数の要因に応じてWPF CanExecute
アプリケーションのメニューにCanExecute
パラメーターを使用する際にジレンマに直面しています。CommandBinding
状況は次のとおりです。アプリケーション自体は、作業モード、レビュー モードなどの特定のモードで実行できます。モードに応じて、一部のメニュー項目を有効または無効にする必要があります (したがって、実行可能または不可能)。
これまでに行ったことは、CanExecute の 4 つのイベント ハンドラーを作成することです。
一部のメニュー コマンドは両方のモードに共通であるため、一部は各モード専用です。
アプリケーションが開発されるにつれて、特定のメニュー コマンドをその時点で実行する必要があるかどうかを決定する要因が増えます。私が考えることができる解決策は次のとおりです。
- イベントハンドラーにブールマルチバインディングを追加しました
CanExecute
が、このソリューションの例が見つかりませんでした.不可能だと思います. - さらに長い名前のイベントハンドラーを追加する
CanExecute
と、実際にはコードが読みにくくなります - 「メニュー項目ごと」
CanExecute
のイベントハンドラーを持ち、各イベントハンドラーのコードをいくつかのブール変数に基づいて、その結果を決定します
メニュー項目の有効化はイベント ハンドラーで実行できることは知っていますSubmenuOpened
が、多くのコマンドには もKeyGesture
定義されています。
私の質問は次のとおりです。この場合のベスト プラクティスは何でしょうか。アプリケーションのロジック (コマンド実行の可用性) が保証され、コードの読みやすさも妥当なレベルに保たれますか?
ご提案ありがとうございます。