問題タブ [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 - オブジェクト (エンティティでもフレームワークでもない) を WPF ViewModel でダーティとしてマークする
私のビューモデルには、シリアライズ可能CurrentObject
なタイプのプロパティがあります。SomeDomainType
プロパティを編集するためのフォームがあり、ボタンの 1 つは ICommand にデータバインドされた「Commit Changes」CommitChangesCommand
です。
オブジェクトが変更された場合、つまりオブジェクトが「ダーティ」である場合にのみ、このボタンが (CanCommitChangesCommand()
ジョシュ・スミスの と適切に配線された を介して) アクティブになることを期待しています。RelayCommand
もう一度言いますが、私が聞きたいのは:
「オブジェクトをダーティーとしてマークして、いくつか
private bool ThatPropertyIsDirty()
の内部でそれをチェックする方法を取得するにはどうすればよいですかCanExecute()
?」
wpf - MVVM RelayCommand CanExecute
実行部分と canExecute 部分で RelayCommand を実装しています。RelayCommand は、canExecute 部分がなくても機能しますが、canExecute 部分を追加すると、コマンドがボタンをロックします。RelayCommand は、CanExecute 部分が true である限り、ボタンを実行できるかどうかのみをチェックします。canExecute 部分が false になると、ボタンをクリックする必要があってもクリックできなくなります。ボタンをクリックするたびに実行できるかどうかを制御し、実行できなくなったら永久にロックしないようにするにはどうすればよいですか?
c# - Mvvmlight RelayCommand での canExecute の奇妙な動作
私は Mvvmlight を学んでいますが、そのcanExecute
RelayCommand についてかなり混乱しています。
基本的に、私は aButton
と aをPasswordBox
持っています。私が望むのは、PasswordBox が空の場合にボタンを無効にすることです。私の解決策は、PasswordBox を CommandParemeter として Button に渡し、canExecute メソッドで PasswordBox を受け取ることです。 null か空かを指定します。最初にコマンドを宣言します。view
Command
viewModel
次に、次のようにインスタンス化しますClass Constructor
。
最後にcanExecute
、以下のようにメソッドを実装します。
System.Reflection.TargetInvocationException
未処理の例外が でスローされるため、上記の canExecute メソッドは機能しませんPresentationFramework.dll
。
そこで、上記のコードを でラップしてみますtry...catch
。今回は、魔法のように機能します。
私はそのような行動についてかなり混乱していcanExecute
ます、何かアイデアはありますか?
wpf - ICommand は、CanExecute を使用してボタンの IsEnabled を更新しません。
コマンドにバインドされた非常に単純なボタンがあります
私のコマンドコード
コードは CanExecuteSaveCommand に基づいてコマンドの実行を効果的にブロックしますが、ボタンが無効になることはありません。これを実現する方法はありますか?
c# - MVVM Light - RelayCommand の RaiseCanExecuteChanged の使用
私はMVVMパターンを使用しています。私の見解では、人の詳細用のテキストボックスがあり、そのうちの 1 つが idBox です。また、ビューはいくつかのボタンで構成されており、そのうちの 1 つが editModeBtn です。
idBox 内に有効な int がある場合にのみ、editModeBtn を有効にしたいと考えています。
editBtn の Xaml (ビュー内) は次のようになります。
対応するビューモデルには、次のコードがあります。
また、CanExecute メソッド (私の場合は CanEdit) で、パラメーター (id) が有効な int に設定されているかどうかを確認し、true を返したいと考えています。そうでなければ、偽。
基本的に、idBox に何かが書き込まれたり削除されたりするたびに、コマンドの canExecute メソッドが呼び出されるようにします。コマンドの RaiseCanExecuteChanged() はどこに置くべきですか? MVVM を使用していない場合は、textBox の textChanged イベントに入れることができますが、ここではそうではありません。RaiseCanExecuteChanged を使用したことがないので、確認したいだけです。ありがとう!
eclipse-rcp - Eclipse Luna: ハンドラーの @CanExecute メソッドが呼び出されない
Eclipse Luna RCP のコマンド ハンドラーに問題があります。
私の E4 アプリケーション モデルでは、特定の状況下でのみ有効にする必要があるいくつかのコマンドと関連するハンドラーを定義しました。このため、私のハンドラー POJO では@CanExecute
、必要な条件をチェックする場所でアノテーションが付けられたメソッドを実装しました。
また、これらのコマンドに関連付けられたメニューとツールバーの項目も定義しました。
問題は、@CanExecute
メソッドが適切に呼び出されず、その結果、メニューとツールバーの項目が適切に有効化/無効化されないことです。
特に、メニュー項目の場合、@CanExecute
メソッドはアプリケーションの起動時に数回だけ呼び出され、その後は呼び出されません。
代わりに、ツールバー項目の場合、@CanExecute
メソッドはアクティブなコンテキストが変更された場合にのみ呼び出されます (たとえば、アクティブなパーツを変更したり、新しいシェルを開いたりする場合)。
Kepler では、動作がまったく異なります (期待どおりに動作しました)。
- メニュー項目の場合、
@CanExecute
メニューが表示されるたびにメソッドが呼び出されました @CanExecute
ツールバー項目の場合、 400 ミリ秒ごとにメソッドを呼び出すタイマーがありました
これは Luna の既知のバグですか? 期待される動作を実現するための回避策を知っていますか?
ありがとう!
c# - 「command.Execute」を呼び出すと、暗黙的にCanExecuteが最初に呼び出されますか?
最初に CanExecute を呼び出さずに、Command の Execute の呼び出しを実装しました。
デバッグから、 CanExecute が呼び出されていることがわかります。ただし、これが偶然かどうかはわかりません。
手動で Execute を発生させるたびに CanExecute が暗黙的に呼び出されるという事実に依存できるかどうか、または自分で CanExecute を確実に呼び出す必要があるかどうかを知りたいですか?