問題タブ [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 投票する
1 に答える
400 参照

wpf - オブジェクト (エンティティでもフレームワークでもない) を WPF ViewModel でダーティとしてマークする

私のビューモデルには、シリアライズ可能CurrentObjectなタイプのプロパティがあります。SomeDomainType

プロパティを編集するためのフォームがあり、ボタンの 1 つは ICommand にデータバインドされた「Commit Changes」CommitChangesCommandです。

オブジェクトが変更された場合、つまりオブジェクトが「ダーティ」である場合にのみ、このボタンが (CanCommitChangesCommand()ジョシュ・スミスの と適切に配線された を介して) アクティブになることを期待しています。RelayCommand

もう一度言いますが、私が聞きたいのは:

「オブジェクトをダーティーとしてマークして、いくつかprivate bool ThatPropertyIsDirty()の内部でそれをチェックする方法を取得するにはどうすればよいですかCanExecute()?」

0 投票する
4 に答える
19315 参照

wpf - MVVM RelayCommand CanExecute

実行部分と canExecute 部分で RelayCommand を実装しています。RelayCommand は、canExecute 部分がなくても機能しますが、canExecute 部分を追加すると、コマンドがボタンをロックします。RelayCommand は、CanExecute 部分が true である限り、ボタンを実行できるかどうかのみをチェックします。canExecute 部分が false になると、ボタンをクリックする必要があってもクリックできなくなります。ボタンをクリックするたびに実行できるかどうかを制御し、実行できなくなったら永久にロックしないようにするにはどうすればよいですか?

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

c# - Mvvmlight RelayCommand での canExecute の奇妙な動作

私は Mvvmlight を学んでいますが、そのcanExecuteRelayCommand についてかなり混乱しています。

基本的に、私は aButtonと aをPasswordBox持っています。私が望むのは、PasswordBox が空の場合にボタンを無効にすることです。私の解決策は、PasswordBox を CommandParemeter として Button に渡し、canExecute メソッドで PasswordBox を受け取ることです。 null か空かを指定します。最初にコマンドを宣言します。viewCommandviewModel

次に、次のようにインスタンス化しますClass Constructor

最後にcanExecute、以下のようにメソッドを実装します。

System.Reflection.TargetInvocationException未処理の例外が でスローされるため、上記の canExecute メソッドは機能しませんPresentationFramework.dll

そこで、上記のコードを でラップしてみますtry...catch。今回は、魔法のように機能します。

私はそのような行動についてかなり混乱していcanExecuteます、何かアイデアはありますか?

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

wpf - ICommand は、CanExecute を使用してボタンの IsEnabled を更新しません。

コマンドにバインドされた非常に単純なボタンがあります

私のコマンドコード

コードは CanExecuteSaveCommand に基づいてコマンドの実行を効果的にブロックしますが、ボタンが無効になることはありません。これを実現する方法はありますか?

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

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 を使用したことがないので、確認したいだけです。ありがとう!

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

eclipse-rcp - Eclipse Luna: ハンドラーの @CanExecute メソッドが呼び出されない

Eclipse Luna RCP のコマンド ハンドラーに問題があります。

私の E4 アプリケーション モデルでは、特定の状況下でのみ有効にする必要があるいくつかのコマンドと関連するハンドラーを定義しました。このため、私のハンドラー POJO では@CanExecute、必要な条件をチェックする場所でアノテーションが付けられたメソッドを実装しました。

また、これらのコマンドに関連付けられたメニューとツールバーの項目も定義しました。

問題は、@CanExecuteメソッドが適切に呼び出されず、その結果、メニューとツールバーの項目が適切に有効化/無効化されないことです。

特に、メニュー項目の場合、@CanExecuteメソッドはアプリケーションの起動時に数回だけ呼び出され、その後は呼び出されません。

代わりに、ツールバー項目の場合、@CanExecuteメソッドはアクティブなコンテキストが変更された場合にのみ呼び出されます (たとえば、アクティブなパーツを変更したり、新しいシェルを開いたりする場合)。

Kepler では、動作がまったく異なります (期待どおりに動作しました)。

  • メニュー項目の場合、@CanExecuteメニューが表示されるたびにメソッドが呼び出されました
  • @CanExecuteツールバー項目の場合、 400 ミリ秒ごとにメソッドを呼び出すタイマーがありました

これは Luna の既知のバグですか? 期待される動作を実現するための回避策を知っていますか?

ありがとう!

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

c# - 「command.Execute」を呼び出すと、暗黙的にCanExecuteが最初に呼び出されますか?

最初に CanExecute を呼び出さずに、Command の Execute の呼び出しを実装しました。

デバッグから、 CanExecute が呼び出されていることがわかります。ただし、これが偶然かどうかはわかりません。

手動で Execute を発生させるたびに CanExecute が暗黙的に呼び出されるという事実に依存できるかどうか、または自分で CanExecute を確実に呼び出す必要があるかどうかを知りたいですか?