問題タブ [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.
wpf - ユーザーコントロール内のコントロールを再利用する
UserControlUserControl1とUserControl1内のボタンがあります。そして、ボタンのICommandプロパティを持つUserControl1ViewModelがあります。このコマンドを使用して、VMの外部(他のVMまたはメインウィンドウのVMから)のメソッドを呼び出す必要があります。このためのベストプラクティスは何ですか?
c# - ItemsControlアイテムからのRelayCommand送信者
MVVMのRelayCommandを使用してアクションをXAMLにバインドすることに成功しましたが、ItemsControlに小さな問題があります。
私のビューモデルでは:
そのアイテムにバインドされているオブジェクトを受け取るために、ビューモデルでSelectDeviceCommandを定義するにはどうすればよいですか?
SelectDeviceCommandが呼び出されていません...(ただし、デバイスをミニビューモデルにしてSelectDeviceCommandを実装する必要があるためだと思いますが、それは正しいですか?)
c# - EventToCommand を介して LayoutRoot を RelayCommand に送信するにはどうすればよいですか?
トリガーを使用したグリッドの例:
私のViewModelでは、LoadedCommandを次のように設定しました:
ViewModel イニシャライザには、次のようなものがあります。
次に、私の DoLoaded でこれをやろうとしています:
ビューのグリッドで Loaded="" を取り除こうとしていて、代わりに RelayCommand を実行しようとしていることがわかります。問題は、OriginalSource が何も返さないことです。ロードされたイベントはこの方法で正常に実行されていますが、RoutedEventArgs を介してグリッドを取得する必要があるようです。
CommandParameter="{Binding ElementName=LayoutRoot}" を使用して EventCommand で Grid を渡そうとしましたが、F5 キーを押してプロジェクトを実行すると、VS2010 がクラッシュします。
何か案は?または、これを行うより良い方法はありますか?ビュー C# で Loaded イベントを実行してから、ビュー コード ビハインドで ViewModel を呼び出しましたが、より適切なバインディングを行いたいと考えています。Views コード ビハインドで ViewMode と対話するのはハックのように感じます。
.net - イベント引数と送信者を RelayCommand に渡す
RelayCommand を使用する場合、どのようにイベント送信者を取得しますか?
wpf - MVVM コマンドの「実行可能」状態のプログラムによる再評価
次の記事に基づいて、MVVM パターンを使用して WPF アプリケーションを作成しています: WPF Apps With The Model-View-ViewModel Design Pattern
ビューに 2 つのボタンがあり、ボタンの「コマンド」プロパティが (データ バインディングで) RelayCommand クラスの特定のインスタンスにバインドされています (上記の記事の「図 3 The RelayCommand クラス」を参照)。RelayCommand クラスは、指定されたコマンドを実行できるかどうかのチェックをサポートしています。
WPF は、コマンドを実行できないボタンを自動的に無効にします。
私の各コマンド (ViewModel クラス内) はバックグラウンド操作を開始し、バックグラウンド操作が終了するまでコマンドを再度実行することはできません。RelayCommand インスタンスには、バックグラウンド操作がまだ機能しているか、完了しているかに関する情報があります。
私の問題は次のとおりです。いずれかのボタンを押した後、バックグラウンド操作が開始され、コマンドが完了するまでコマンドを実行できないため、ボタンは自動的に無効になります(これは問題ありません)が、操作が完了すると、ボタンは無効になります。コマンドの「実行可能」述語が自動的に再評価されないため、自動的に有効になりません。再評価は、アプリケーションを緩めてフォーカスを取り戻す (ALT + TAB を押す) ことにより、手動でトリガーできます。このトリックを実行すると、ボタンが再び有効になります。
ボタンのコマンドの「実行可能」状態をプログラムで再評価するにはどうすればよいですか?
wpf - MVVMLightToolkitのRelayCommandでラムダ関数に単一のパラメーターを渡すことができません
JoshSmithとLaurentBugnionのRelayCommandの実装に違いがあるかどうかはわかりませんが、どこを見ても、RelayCommandのExecute部分は0または1のパラメーターを取ることができるようです。私はそれを0でしか動作させることができませんでした。次のようなことを試してみると:
エラーが発生します:Delegate 'System.Action' does not take '1' arguments
。私が正気でないことを確認するために、RelayCommandの定義に行き、ソリューションのどこかに不正な実装がないことを確認しましたが、確かに、それは単なるActionであり、Action<>ではありませんでした。
一体何がここに欠けているのですか?
c# - WPF MVVM ViewModel で RelayCommand/DelegateCommand を簡素化する
MVVM を実行してコマンドを使用している場合、 MSDNの元の MVVM 記事の次の例のように、プライベート RelayCommand フィールドまたは DelegateCommand フィールドによってサポートされている ViewModel の ICommand プロパティがよく表示されます。
ただし、これは非常に煩雑で、新しいコマンドを設定するのはかなり面倒です (私は、このような入力をためらうベテランの WinForms 開発者と一緒に仕事をしています)。だから私はそれを単純化したいと思って、少し掘り下げました。get{} ブロックの最初の行にブレークポイントを設定すると、アプリが最初にロードされたときにのみヒットすることがわかりました。後で、必要な数のコマンドを起動できますが、このブレークポイントはヒットしません。これを単純化して、ViewModel から混乱を取り除きたいと考えていたところ、次のコードが同じように機能することに気付きました。
ただし、C# やガベージ コレクターについては、これが問題を引き起こす可能性があるかどうか (場合によっては過剰なガベージが生成されるなど) を知るには十分ではありません。これは何か問題を引き起こしますか?
.net-3.5 - RelayCommandを実行するか、アクションを渡します、メソッドがインターフェースからのものである場合、動作が異なりますか?
これは、ここで話す私の全体的な.NETの経験不足だと思いますが、なぜこれが私に起こっているのか理解できません。
私のモデルImportMany
はISystemSetupEditorと呼ばれるインターフェースであり、この場合、Export
そのインターフェースとなるいくつかの部分があります。
アプリケーションのViewModelには、メニューを作成し、を繰り返してIEnumerable<ISystemSetupEditor>
メニュー項目を設定するメソッドがあります。次のようになります。
問題は、メニュー項目をクリックすると、最後に列挙されたISystemSetupEditorから派生したオブジェクトのShowTool()が常に呼び出されることです。これは、同じ参照が各RelayCommandによって格納されているかのようです。
私は誰かができることを望んでいました:
- なぜこれが起こっているのかを説明するか、少なくともキーワードを教えてください。そうすれば、自分で調べて理解することができます。
- 考えられる解決策を提示します。これまでに思いついたのは、別の辞書を管理することだけです。ここで、T、Uは正しいライブラリに解決できるため、後で適切な関数を呼び出すことができます。
wpf - ICommandsでのIsDirtyの使用
オブジェクトの編集中にIsDirtyフラグを使用してCanExecuteコントロールとNavigationコントロールを制御しようとしています。
問題は、これが機能するために、IsDirtyメソッドにonPropertyChangedを使用して、コントロールが変更通知を受け取る必要があると思うことです(オブジェクトIsDirtyのときに一部のコントロールを無効にしたい)残念ながら、スタックオーバーフローが発生するため、厄介です。 IsDirtyの恐ろしいループにスパイラル...hehe..
誰かがこれに似たものを機能させることができましたか?私がしているのは、OnPropertyChangedメソッドでIsDirtyをtrueに設定することだけです。次に、canExecuteメソッドでtrueに設定されているかどうかを確認していますが、コントロールでDatabindする必要があります...これがすべての問題の原因です。
誰かがこのようなものを実装する方法を知っていますか?
これが私の解決策です
::ViewModelBaseで
::ViewModelBaseから派生したEditViewModelBase内。
::私のviewModelで
mvvm - このラムダ式に param があるのはなぜですか?
Josh Smith による MVVM に関する MSDN マガジンの記事には、完全には理解できないラムダ式が含まれています。このコードのparamの目的は何ですか?
私の好みの言語 VB に翻訳すると、次のようになります。
CanSaveまたはSave内で使用されている場合、paramのみが表示されると予想していました。私はラムダ式に少し慣れていません。私が知る限り、どこでも宣言も使用もされていない変数を見るのは奇妙です。説明をいただければ幸いです。
これをコンテキストに入れると、RelayCommand (C#) のコンストラクターは次のようになります。
そしてVBで: