問題タブ [relaycommand]
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.
c# - Relaycommand をテストするにはどうすればよいですか?
MVVM に関するこの
MSDN の記事を読んでいます。現在、図 15 の RelayCommand を見ています。この SaveCommand をテストしたいとします。どうすればいいですか?NUnit と Rhino Mocks 3.6 を使用しています
silverlight - GalasoftRelayCommandが起動しない
SL4アプリケーションを構築するためにMVVMLightフレームワークを使用しています。私のシンプルなアプリは、主に単一のメインビュー(shellView)で構成されており、複数のUserControlに分割されています。これらはUIの便利な分離であるため、独自のViewModelはありません。
ShellViewには、複数のキーパッドボタン(カスタムユーザーコントロール)を含むキーパッド(カスタムユーザーコントロール)が含まれています。
DataContextが適切に設定され、階層内のすべてのユーザーコントロールによって使用されていることを(確認したため)確信しています。(ShellViewのDatacontextはShellViewModel、キーパッドのDataContextはShellViewModelなどです)。
ShellViewModelには、「ProcessKey」という名前のICommand(RelayCommand)があります。
キーパッドコントロールには、次のようなものがあります。
KeypadButtonは、基本的にボタンを含むグリッドです。MouseLeftButtonUpイベントがキャッチされ、カスタムの「クリック」イベントが発生します。私がしていることを簡単に説明するためのコードをいくつか紹介しましょう。
ここで、innerButton_Clickの本体にブレークポイントを設定すると、Clickが適切にキャッチされ、RelayCommandへのポイントが含まれていることがわかります。ただし、何も起こりません: "Click(sender、new KeypadButtonEventArgs());" 実行されますが、それ以上はありません。
なぜこれがそう振る舞うのですか?RelayCommandで定義されているターゲット関数を実行するべきではありませんか?多分スコープ関連の問題ですか?
よろしくお願いします、乾杯、ジャンルカ。
c# - MVVMライトRelayCommandパラメーター
GalaSoftMVVMLightフレームワークを使用してrelayコマンドにパラメーターを渡す際に問題が発生しました。mvvm lightのrelaycommandの実装はラムダパラメーターを使用しないことを知っているので、私はいくつかの調査を行い、人々が次のようなことを行うことでそれを回避する方法を見つけました:
ただし、次のような行_projmenuItem_Edit = new RelayCommand(ProjEditNode);
でエラーが発生し続けますArgument 1: cannot convert from 'method group' to 'System.Action'
私は何が欠けていますか?
wpf - マルチウィンドウ WPF アプリでのコマンド バインディング
私のアプリケーションは、複数のデザイナー ウィンドウを持つことができます。各ウィンドウは、RelayCommands を使用して動的に通信する複数のユーザー コントロールで構成されます。指揮インフラストラクチャのバックボーンとして、次のクラスを作成しました。
ユーザーコントロールの各ビューモデルは、コンストラクターで次のようなことを行います
ただし、アプリケーションが複数のウィンドウを持つことができるという点を完全に見逃していました。各ウィンドウが開かれると、その特定のウィンドウに対して静的コマンドが設定されます。
例:
ウィンドウ A が開かれます。usercontrols のコンストラクターが RelayCommands を設定し、すべて問題ありません。
ウィンドウ B が開きました。ユーザー コントロールのコンストラクターが RelayCommands を設定します。ウィンドウ A のコマンド バインドが失われました。
そのため、タブをウィンドウ A (ウィンドウはタブ付き) に変更すると、コマンドが機能しません。
タブを変更すると、アクティブなウィンドウが常にコマンドを設定するように、いくつかのアイデアが必要です。コマンドを tab_selection_changed イベントに入れようとすることはできますが、どういうわけか私には見栄えが悪いです。これを行う適切な方法はありますか?どんな助けでも大歓迎です。
編集:
この質問は、読者の間で少し混乱を招きました。コマンドに対して複数のサブスクライバーを作成しようとしているわけではありません。どの時点でも、アクティブなウィンドウは 1 つだけです。このウィンドウはいくつかのユーザー コントロールで構成されており、その一部はコマンドを使用して動的にロードされます。ただし、各コマンドは単一のビュー モデル クラスによって処理されるため、複数のサブスクライバーはありません。私の問題は、アプリケーションが複数のウィンドウをタブにロードできることです。特定の時点でアクティブなウィンドウは1つだけですが、ユーザーは別のタブで別のウィンドウをアクティブにすることができます。ビュー モデル コンストラクターが静的 RelayCommands を割り当てると、新しいウィンドウが読み込まれるたびに静的コマンドが新しいバインディングに設定されます。
ウィンドウ 開いたウィンドウ ビュー モデル コンストラクターは、静的コマンド バインドをそのオブジェクト コマンド ハンドラーに設定します。ウィンドウ A がアクティブです。指揮はいいです。
Window B loaded-window B ビュー モデル コンストラクターは、静的コマンド バインドをそのオブジェクト コマンド ハンドラーに設定します。ウィンドウ B がアクティブです。指揮はいいです。
ここで、[ウィンドウ A] タブを選択して、ウィンドウ A をアクティブに設定します。指揮は効かない。もちろん、コマンドはウィンドウ B コマンド ハンドラーにバインドされているため、問題はありません。
理論的には静的コマンドは、任意の時点でアクティブなウィンドウが 1 つしかないため、シナリオを処理できます。しかし、どのように??
wpf - コマンドを listboxitems にバインドする
いずれかのアイテムがクリックされたときにリストボックスアイテムにリレーコマンドをバインドすることは可能ですか?
windows-phone-7 - SelectionChangedイベントでインタラクショントリガーを使用する正しい方法
起動するようにイベントに接続されたコマンドがありますが、CommandParameterで取得するのは、以前に選択されたアイテムであるか、SelectionChangedが完了する前に選択されたアイテムである可能性があります。
いずれにせよ、イベントから新しく選択されたアイテムを取得するために何を変更すればよいかわからない。
ありがとう
c# - silverlight: アイテムの横にあるボタンをクリックして、リストボックス内のアイテムから値を渡す方法
リストボックスがあり、アイテムとその横に削除ボタンが表示されます。パラメータをビューモデルに渡すリレーコマンドをトリガーして、削除を実行するにはどうすればよいですか。
サンプルコード。
モデルを見る:
しかし、うまくいきません。Silverlight は初めてなので、この種のシナリオを経験した人はいますか? 共有できますか?
wpf - MVVMでクリックイベントを処理する最良の方法は何ですか?
MVVMでクリックイベントを処理する最良の方法は何ですか? 最善の方法はありますか?
私は2つの解決策を見つけました:
リレーコマンドで:
プロ: ?; contra:フォーカスなどのUI 要素を変更する場合は、イベントに関する回避策が必要です
付属の動作で:
プロ:UIの変更にはRoutedEventArgsがあります。反対: 他のコントロールへのアクセス?
現在、両方のソリューションを使用しています。Buttons の RellayCommand (UI 更新のイベントを含む) と、ユーザーがクリックした場合にツリービュー項目の選択を解除するためのツリービューの添付された動作。
unit-testing - ユニットテストMVVMLightMessengerメッセージは、RelayCommandが実行されると送信されます
RelayCommandの実行時にメッセンジャー送信が呼び出されたことを単体テストするにはどうすればよいですか?
ViewModelClass:
単体テスト:
mvvm - CanExecute と CanExecuteChanged、これらを RelayCommand で実装する必要がありますか?
私はMVVM-Lightを使用しており、リレーコマンドが完全に機能しています。実装する必要があることを読みCanExecuteChanged
ましたCanExecute
. 私は良い例を見つけることができませんが。
これらを実装する方法の良い例はありますか。
CanExecute は、実行できない場合に False を返す必要がありますが、ボタンを無効にするだけではありませんか??
いつ実行しCanExecuteChanged
ますか?
それぞれをいつ使用するかの良い例は誰にもありますが、私のコードはなくても機能しますが、このブログ投稿では、これらの項目を実装する必要があると述べています。
Enabled
ボタンや同様のコントロールを無効にできるように、プロパティまたは何かをViewModelのプロパティにバインドするだけだと思っていたので、少し混乱していますか?
理解の助けがあれば、本当に感謝しています。
編集
これは私が今持っているものです...動作していますが、ボタンが物理的に無効になっておらず、falseを返しているためコマンドが実行されません。RaiseCanExecuteChanged を強制的に実行するために、コンストラクターで CanExecuteMe を呼び出しています ...
これは、ビューモデルのコンストラクターで実行されます
これが私のコードの残りの部分です。例から取ったものです。
そして、ここに私のXAMLがあります