問題タブ [icommand]
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.
silverlight - MVVM Light Toolkit を使用して [キャンセル] ボタンで ChildWindow を閉じる方法
私はMVVMが初めてで、 MVVM Light Toolkitを使用して従来のキャンセルボタンで ChildWindow を閉じる方法を見つけようとしています。
私の ChildWindow (StoreDetail.xaml) には、次のものがあります。
私のViewModel(ViewModelStoreDetail.cs)には、次のものがあります。
wpf - ビュー モデルでコマンドを呼び出すためのスタイル内の WPF インタラクション トリガー
重複の可能性:
スタイル セッターにブレンド動作を追加する方法
スタイルでインタラクション トリガーを使用すると、「トリガーはタイプ スタイルのアタッチ可能な要素ではありません」というエラーが表示されます。このエラーの実際の意味と解決方法の説明。
参考までに、MVVM Light ツールキットの EventToCommand の例をご覧ください。
この特定のケースでは、EventTitle としてイベントを表す Infragistics の Timeline コントロールを使用しています。EventTitle がクリックされたときに、コマンドを発生させたいと思います (Timeline コントロールは EventTitleClicked のようなイベントを定義しないことに注意してください)。現在、イベントを使用してコード ビハインドから ViewModel メソッドを呼び出すことで機能を実現できますが、代わりに xaml から直接コマンドを呼び出したいと考えています。
wpf - コマンドをバインドして DataGrid の行をダブルクリックする方法
次のように、選択リストとして使用することを目的とした WPF UserControl を開発しました。
- エンティティ (従業員など) の CollectionView にバインドされた DataGrid
- DataGrid に表示されるアイテムをフィルター処理するために使用できる、DataGrid の上の TextBox。
ユーザーが DataGrid の行をダブルクリックしたときに実行される Command を公開したいと考えています。コンテナーは、DataGrid の SelectedItem で何かを行うことで、これに対応できます。
これまでのところ、次のようにダブルクリックを処理しようとしました:
ただし、ユーザーが DataGrid ヘッダーをクリックすると、ダブルクリック イベントが発生します。ダブルクリックがDataGridの本体にあるときにのみコマンドが実行されるように制限できるようにしたいと思います。これを行う宣言的な方法はありますか?
アップデート
私はちょうど WPF と MVVM に慣れてきたところで、このような低レベルの再利用可能なコンポーネントを実装する方法についてのガイダンスを本当に探しています。一般的なアドバイスもありがたく受け取られ、支持されます。現状では、この UserControl を次のようにする必要があると想定しています。
DataGrid の SelectedItem にバインドされている依存関係プロパティ "SelectedItem" を公開します。
ユーザーが行をダブルクリックしたときに発生する RoutedEvent "ItemDoubleClick" などを公開します。
行のダブルクリック イベント ハンドラを実装
ICommandSource
して呼び出します。CommandHelpers.ExecuteCommandSource(this)
wpf - WPF - カスタム コントロール + ICommand (これを実装するにはどうすればよいですか?)
基本的に、カスタム コントロールがありFooControl
ます。
イベント処理を追加する必要がありますが、RoutedEvent を使用するよりも、代わりに Commanding を使用することをお勧めします。ただし、これを行う方法がよくわかりません。Bar1Property (DependencyProperty) が変更されたときに、Execute に関連付けられた実行プロパティが発生するようにしたい場合。.NET Reflector を介して ButtonBase コードを調べたところ、非常に複雑に見えます。コマンドを追加するのはこれほど複雑ですか?? 明らかに、CanExecuteChanged が変更されているかどうかに応じて、コントロールがそれ自体の特定の部分を有効/無効にするようにする必要もあります。しかし、それは別の部分だと思います。
これまでのところ、私の OnBar1Changed 関数は次のとおりです...
c# - MVVM: Execute メソッド内から "CanExecute" メソッドをチェックする必要がありますか?
CanExecute()
との使用法は理解していますがExecute()
、次のシナリオについて疑問に思っています。
基本的に、コンシューマー ビューは DoFoo メソッドを直接呼び出すことを決定し (明らかにICommand
インターフェイスの要点を壊します)、NullReferenceException を引き起こす可能性があります。これは少し主観的かもしれませんが、「標準的な」方法で行うことを望んでいます。
私たちは:
if (MyBar != null)
最初に NullReferenceException の可能性を防ぎますか?CanDoFoo()
true を返すことを確認して、NullReferenceException の可能性を防ぎますか?- 消費するビューが適切に動作しており、メソッドを呼び出すことができることを既に確認していると仮定します
DoFoo()
か?
補足として、私がこれを尋ねた主な理由は、単体テストを書いているときに、誰かが対応
Execute()
するメソッドを呼び出さずにメソッドを呼び出すことで、ViewModel を壊す可能性があることに気付いたからです。CanExecute()
明らかに、単体テストでは、メソッドを実行する前にメソッドを実行できることを確認しますが、ビューを消費するとそれを無視する場合があります。
更新: (シナリオ 2)
この質問の拡張として、DoFoo()
例外に関してメソッドが壊れないシナリオを追加したいのですが、論理的に壊れる可能性がありますか?
この 2 番目のシナリオは、実際には壊れません (コマンドは正常に処理できます) が、論理的に壊れます。では、呼び出してビジネス ロジックをもう一度検証するCanDoFoo()
か、消費するビューが動作していると仮定するか? (これはビジネス ロジックを壊すだけであることを忘れないでください)。
基本的にはこれに要約されます...消費するビューが不正な動作によって足元を撃たれないようにするための予防策を講じていますか?
c# - ICommandインターフェイスの使用
特定のインターフェースを実装するクラスがあります(IOrganicEnvironment<T, K>
)
また、ICommanditerfaceを実装します
IOrganicEnvironment<T, K>
インターフェイスは、メソッド内で主に使用する一連のメソッドとプロパティを提供しますICommand Execute()
。
Colorizator
ただし、インスタンスからそのメソッドとプロパティを呼び出すためのクライアントコードは必要ありません。
何ができますか/すべきですか?インターフェイスを実装してexplicitly
作成するinternal
と、これは役に立ちますか?
c# - WPF でのコマンドの名前付け
英語を母国語としないので、メソッドやプロパティの名前を付けるときに文法に疑問を抱くことがよくあります。
NextCommand
コマンド、NextCommandExecuted
実行方法、およびCanNextCommand
ステータスの名前として使用します。
これは理にかなっていますか、それとも使用すべきより正しい命名規則はありますか?
wpf - PreviewKeyDown の代わりに InputBinding
私のコードの MainView では、keyDown をキャッチするために次のイベントがありました。
これを XAML の InputBindings に移動します。
私の最初の試み:
分離コード:
これでは何も起こりません。ほとんどの場合、KeyDown イベントは子要素によって処理されます。
InputBindings の XAML で previewkeydown を設定することは可能ですか? そして、これはどのように達成できますか?
silverlight - リストボックスアイテムテンプレート内のボタンからSilverlight呼び出しコマンド
私はこの質問が数回尋ねられるのを見ましたが、私のシナリオに対する完全な答えを見つけることができませんでした。
プロジェクト内に、リストボックスアイテムとして作成したユーザーコントロールがあります。このユーザーコントロール内にボタンがあります
ボタンには、ビューに固有のクリックイベントがあります。これは、基本的に、可視性の状態に基づいてグリッド行を展開または折りたたみます。ここでは、UIに固有のイベントを使用しました。このボタンには、VMで呼び出されるコマンドもあります。
VMコード
私が抱えている問題は、リストボックスアイテム内でビューがVMにバインドされているときにボタンのコマンドが「失われる」か呼び出されないことです。このコマンドをビュー内の他のボタンに配置すると、コマンドが呼び出されます。リストボックスアイテム内のボタンにバインドされたコマンドを呼び出す方法を誰かが理解するのを手伝ってもらえますか?
前もって感謝します
silverlight - Silverlight - ビュー内のプロパティに基づいてコマンドを呼び出す方法
私はこれについて何時間も頭を悩ませてきましたが、誰かが私を正しい方向に向けることができることを願っています.
ビュー内に、クリック イベントとコマンドが添付されたボタンがあります。クリック イベントは、現在の状態に基づいて、グリッド行の可視性を折りたたみまたは可視に設定します。
xaml
クリック コマンドは、MyDetail セクションの現在の表示状態をテストし、それを展開または折りたたむメソッドを呼び出します。
コマンドは、viewModel などから GetCFSDetailCommand を呼び出します
私が立ち往生しているのは、ビューが折りたたまれているときにのみコマンド GetCFSDetailCommand を呼び出したいということです。現在設定されている方法は、ボタンがクリックされるたびにコマンドが起動することです。ボタンを無効にしたくないので、ICommand CanExecute を使用できません。これを達成する方法についての提案やアイデアをいただければ幸いです。考えられる 1 つは、イベント コード ビハインド内の可視性をテストし、それに基づいてイベントにコマンドを呼び出すことでした。これが正しいアプローチである場合、イベントからコマンドを呼び出すことができなかったので、コード サンプルを本当に感謝します。
前もって感謝します