問題タブ [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 に答える
1210 参照

wpf - MVVM Light canExecute always false with RelayCommand not RelayCommand

Do anyone know why being specific with the MVVM Light RelayCommand generic type would cause its canExecute to always resolve to false for the binding? I

Do anyone know why being specific with the MVVM Light RelayCommand generic type would cause its canExecute to always resolve to false for the binding? In order to get the correct behavior I had to use an object and then convert it to the desired type.

NOTE: canExecute was simplified to a boolean for testing the block that does not work and is normally a property CanRequestEdit.

Does NOT work:

Works:

XAML:


You code looks fine, if dd() doesn't stop execution of the controller, then another controller is executing. So double check your routes and controllers.

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

c# - コンテキスト メニューが開いたときに CanExecute が発生しない

関連する質問がいくつかあることは知っていますが、どれも問題を見つけるのに役立ちませんでした。

ほとんどの回答は、この回答に示されているようにCanExecuteChanged を実装することを提案しています。まあ、それは私の問題の解決策ではありません。Josh Smith の実装に似た RelayCommand の実装があります。(同様に、私たちの実装はより多くの詳細を追加しますが、コアの実装は同じです。)

インターネットを検索しているときに、フォーカスされた要素がない場合、ルーティングは ContextMenu で停止し、MenuItem に到達しないこともわかりました。その場合に役立つ解決策をここに示します
しかし、本当にフォーカスされた要素がないかスヌープに確認したところ、それは問題ではないことがわかりました。とにかく、修正は役に立ちませんでした。
また、テスト プロジェクトでその問題をシミュレートし、修正することができました。したがって、修正は一般的に機能しますが、役に立たないだけです。ただし、機能させるために修正を少し調整する必要がある可能性はまだあると思います。as AncestorTypeMyControlの代わりに試してみました。 asの代わりに試しました。ContextMenuPlacementTarget.TagPlacementTargetPathしかし、それを機能させるために他に何をしようとしているのかわかりません(これがバグであると仮定して)。

面白いことに、手動で CommandManager.InvalidateRequerySuggested() を呼び出しても機能しません。ContextMenuOpening で発生するコマンドを追加しました。これにより CanExecute が強制的に実行されると思いましたが、間違っているようです。

そのため、ContextMenu が開かれたときにハンドラーが発生しない理由と、CanExecuteそれを修正する方法をさらに探しています。

これが私のXAMLコードです(EventTriggerforを含むContextMenuOpening):

MyCommand(Can)Execute ハンドラの定義は次のとおりです。

の CanExecute を強制的に発生させようとしたOnContextMenuOpeningハンドラーは次のとおりです。MyCommand

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

c# - コマンドを実行できなかったことをユーザーに通知する

次のようなコマンドに関連付けられた TextBox があります。

プロパティTextContentは、ViewModel で定義された文字列です。このコマンドMyCommandは ViewModel でも定義されています。ViewModel は View を認識していません。

このコマンドは、TextBox にフォーカスがあり、Enter キーが押されるたびに呼び出されます。残念ながら、CanExecutefalse が返された場合、ユーザーは、コマンドが実行されなかったことを (視覚的に) 確認できません。これは、TextBox に視覚的な変化がないためです。

Enter キーを押した後にコマンドを実行できなかったことをユーザーに示す方法についてのアドバイスを探しています。

私の考え(およびそれらについての私の疑問):

  • CanExecuteが返されたときに TextBox を無効にする: の戻り値は文字が入力/変更されるたびに変わる可能性がfalseあるため、これはオプションではありません(TextBox 内のテキストは の結果に影響します)。初めて無効にすると、ユーザーはそれ以上入力できないため、永久に無効のままになります。CanExecuteCanExecute

  • コマンドが実行されなかったことを示すメッセージ ボックスを表示します。ViewModel は View を認識しないことに注意してください。ViewModel からメッセージ ボックスを開くことはできますか? さらに、メッセージボックスを開くための呼び出しはどこに置くべきですか? CanExecuteEnterキーを押した後にのみメッセージボックスを取得したいので、内部ではありません。毎回CanExecutereturnではありませんfalse。たぶん、CanExecute常に returntrueを作成し、内部でチェックを行いますExecute: チェックが問題ない場合は、コマンドを実行し、そうでない場合は、ユーザーにメッセージを表示します。しかし、それでは、持つという点がCanExecute完全に失われています...

私はMVVMを維持したいのですが、ViewModelにリダイレクトするためのコードビハインドは私にとっては問題ないようです。

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

mvvm - WPF MVVM コマンド CanExecute、フォーカス変更時にのみ再評価

WPFでMVVMプロジェクトをリファクタリングして、MVVM パターンのユーザー間で共通の問題と思われるものを取り除こうとしています。

DataContextMyViewModelであるビューがあります。これは、Execute と CanExecute の両方を実装する Command にバインドされたボタンです。

XAML:

MyViewModelはConnectCommandを公開します:

(最後に私が使用している DelegateCommand の定義)

MyViewModelは、コマンドの CanExecute 部分で使用されるプロパティIsConnectEnabledも公開します。

MyViewModelクラスはINotifyPropertyChangedインターフェイスを実装します

コマンドのCanExecute部分は、アプリケーションでフォーカスが変更されたとき (つまり、クリックしたとき) にのみ評価されます。UpdateSourceTriggerはデフォルトでPropertyChangedに設定されていることを知っているため、現在の解決策は、コード内のいくつかの場所でPropertyChangedイベントを手動で発生させることです。しかし、 IsConnectEnabledの値が変更されるたびに、このアクティビティを自動的に実行したいと考えています。

WPF と MVVM パターンはこの問題の解決策を提供しますか?

完全を期すために、私が使用している完全なICommand実装、 DelegateCommandに従います。