問題タブ [routed-commands]
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 - WPF のスタンドアロン コマンド オブジェクト
WPFコマンドをスタンドアロンオブジェクトとして実装することは可能/実用的ですか? もしそうなら、これは通常どのように行われますか? 私がコマンドについて目にする例のほとんどは、通常、RoutedCommand、RoutedUICommand、または RelayCommand のような ICommand の他の実装を使用することを含みます。これらのコマンドが MVVM パターンで機能する方法は、プロパティを通じてこれらのタイプのコマンドのいずれかのインスタンスを公開することです。ViewModel 内では、コマンドのロジックが ViewModel のメソッドとして実装され、デリゲートとしてコマンド オブジェクトに渡されます。
私が理解している「古典的な」コマンド パターンは、各コマンドを OpenCustomerViewCommand などの独自のスタンドアロン オブジェクトとして実装することです。ロジックは独自のオブジェクトに完全にカプセル化されるため、アプリの他の部分で再利用できる可能性があります。たとえば、アプリのいくつかの場所から CustomerView を開くことができる場合、そのメソッドをコピーして各 ViewModel に貼り付けるのではなく、CustomerView にアクセスできる各 ViewModel で OpenCustomerViewCommand のインスタンスを単純に作成できると便利です。 、デリゲートを RelayCommand に渡します。私の理解が正しければ、Cut や Paste などの定義済みの ApplicationCommands はこのように動作します。
私には、ViewModel 内にロジックを提供する必要があるため、コマンド パターンの価値が少し低下するように思えます。この方法で実行することと、UI イベントのコマンド ハンドラーを実装するコード ビハインドを使用することとの主な違いを、私は本当に理解していないと思います。上記で説明したより古典的なアプローチよりも RoutedCommand パターンを使用する必要がある理由はありますか?
c# - CommandManager RequerySuggested イベントの無効化
CommandManager RequerySuggested を使用せずにプロジェクトのパフォーマンスをテストしたいと考えています。次のコードを使用して、CommandManager が RequerySuggested イベントを発生させないようにします。RequerySuggested Event からすべてのイベント ハンドラーを削除します。これを達成するための他の簡単な方法はありますか。
c# - RoutedUICommand.Text プロパティをオーバーライドするための回避策が必要
次のような静的 Command クラスがあります (ただし、さらに多くのコマンドがあります)。
静的コンストラクターの実行時に辞書が初期化されないため、辞書を使用して適切な言語のテキストを取得する必要がありますが、これは機能しません。
私の最初の試みは、RoutedUICommand から派生した新しいコマンド クラスを作成し、Text プロパティをオーバーライドして、get メソッドで dict を呼び出すことでした。しかし、Text プロパティは仮想ではなく、それが呼び出す GetText()-Method もそうではありません。
私が考えることができる唯一のことは、すべての辞書キーを変換するこのクラスで静的初期化メソッドを提供することです。しかし、このようにすべてのコマンドにもう一度名前を付ける必要があるため、これはあまりきれいではありません
名前を付けるのを忘れても、エラーは発生せず、翻訳は行われません。このクラスでコマンドに 2 回名前を付け、XAML コマンドバインディングでもう一度名前を付ける必要があることさえ好きではありません。
これをよりエレガントに解決する方法はありますか?
私は RoutedUICommands が大好きですが、このように私には役に立ちません。Microsoft はなぜ「仮想」という小さな単語をもう少し頻繁に追加できなかったのでしょうか?? (または、JAVA のようにデフォルトにしますか?!)
wpf - 2 つのコントロールに作用するコマンド
コピー/貼り付けなどの標準の WPF コマンドを見ると、それらはすべて 1 つのボタンを使用して機能し、テキスト ボックスに作用するように見えます。
私の質問: ボタンが 1 つある場合にコマンドを使用するにはどうすればよいですか?ただし、データを 2 つの別々のコントロール (テキストボックスとコンボボックス) に設定する必要があります。ユーザーがテキストボックスにテキストを書き込んでいて、コンボボックスの値を選択していない場合、CanExecute は失敗するはずです。これは、コンボボックスが設定されている場合に適用されますが、テキストボックスには適用されません。
特に私の場合、これらのコントロールはすべて tabitem にラップされています。同様に、テキスト ボックスとボタンのみの別のタブもあります。最初のタブと同じ機能を持たせたいのですが、コンボボックスの値をチェックする代わりに、コンボボックスがないことを検出し、代わりにデフォルトの「null オブジェクト」値を渡す必要があります。
Execute メソッドはビューモデルのメソッドを呼び出し、コンボボックスとテキスト ボックスから値を渡す必要があります。同様に、各タブは別の一意の静的値を渡す必要があります。私はコマンドパラメータを使用してこれを処理できると思います。
どうすればこれを機能させることができますか? commandtarget の親タブを作成し、can/execute メソッドでその子コントロールを直接参照する必要がありますか?
.net - ICommands は、WPF MVVM パターン全体にどのように、どこに適合しますか?
WPF コマンドの使用方法と、それらが MVVM パターンにどのように適合するかを学習しようとしています。ボタンやメニューなどの一部のコントロールには Command プロパティがあり、ICommand クラスのインスタンスに設定するとボタンがそのコマンドに接続されることを理解しています。これが設定されると、ボタンはコマンドの CanExecuteChanged イベントで無効化および有効化され、コントロールをクリックするとコマンドの Execute メソッドが呼び出されます。
しかし、各 ICommand のインスタンスはどこに置くべきでしょうか? チュートリアルでさまざまなオプションを見てきましたが、どれが正しいのかわかりません。一部の例では、静的な「ApplicationCommands」クラスが作成され、各コマンドのインスタンスがそのクラスの静的プロパティに割り当てられます。他の例では、コマンドが ViewModel のプロパティとして設定されているのを見てきました。他の例では、View/Window 自体のプロパティとして設定されています。コマンド インスタンスを配置するのに適した場所は?
また、コマンドはビュー、ビュー モデル、またはモデルにどのように関連していますか? これらのコンポーネントのうち、コマンドが認識または操作する必要があるのはどれですか? コマンドが実行されるとどうなりますか? ビューモデル/ビューに変更を伝えるモデルのメソッドを呼び出す必要がありますか? または、コマンドはビュー モデルのメソッドを介してモデルと通信する必要がありますか?
wpf - WPF コマンド ライブラリからのコマンドの再利用は悪い考えですか?
WPF は、独自のアプリケーションでコマンド バインディングを作成できる定義済みコマンド (ApplicationCommands.Save、NavigationCommands.NextPage など) のライブラリを提供します。単一の RoutedCommand/RoutedUICommand に対して複数のコマンド バインディングを作成し、実行されるさまざまなハンドラーを指定することで、アプリケーションのコンテキストに応じてさまざまな動作を取得できることを私は知っています。
私が理解しているように、RoutedUICommand の主な目的は、共通のセマンティック リファレンスを提供することです。ApplicationCommands.New は、MSDN のドキュメントを引用すると、「新しいアイテムを作成する意図を示します」。このコマンドをコマンド バインディングで使用して、アプリケーション内のいくつかの無関係なフォームに新しい項目を作成できます。
この種の再利用が行われていることはめったにありません。オンラインのコードと私が取り組んだプロジェクトでは、通常、'NewEmailCommand' のような名前のコード ビハインドまたはビューモデルで定義された RoutedCommand が表示されます。
コマンドを再利用することにはいくつかの利点があります。
- 通常、RoutedUICommands には Text プロパティが定義されているため、メニュー項目のヘッダーを定義する必要はありません。
- コマンドに入力ジェスチャが定義されている場合、それが使用されるすべての場所で入力バインディングを指定する必要はありません。
- コマンドに入力ジェスチャが定義されている場合、メニュー項目の InputGestureText が自動的に入力されます。
- 同じコマンドを使用すると、コマンドに使用されるラベルとキー/マウスのバインドの両方で、アプリケーション全体の一貫性が促進されます。
考えられるいくつかの欠点:
- 状況によっては、コマンドがあいまいになることがあります。たとえば、1 つの場所に 2 つの異なる「新規」コマンドが必要な場合があります (New->{Project..., Web Site...})。
- コマンドを再利用する代わりに、静的ハンドラーを使用するコマンド バインディングを再利用したい場合があります。
- ApplicationCommands.New は特に有益なコマンド名ではありません。現在のコマンド ハンドラー (何が作成されているかなど) については何も通知しません。
私はコマンドを再利用する傾向がありますが、前述したように、実際には見たことがありません。
あなたの好みは何ですか?聞いたことのない、受け入れられている「ベスト プラクティス」はありますか? コマンドを再利用することによる明らかな問題/その他の利点はありますか?
wpf - WPFは、コントロール外でのイベントのバブリングを防ぎます
要素ツリーから始めましょう。最上位の要素は、ApplicationCommands.Find
コマンドを登録した WPF ウィンドウです。一部の子要素には、このコマンドを指すジェスチャ キー ENTER を持つ KeyBinding があります。誰かが ENTER を押すと、コマンドが実行されます。その中には、いくつかの要素を検索して選択するためのポップアップを備えたカスタム コントロールがあります。ただし、ここでは、カスタム コントロールの外側でキー イベントのバブリングを許可したくありません。しかし、バブリング ルーティング イベントであるはずの を設定e.handled = true
する
と、そのカスタム コントロール内のすべてのコントロール (テキスト ボックスなど) は、あらゆる種類の入力を無視します。KeyDown += new KeyEventHandler (..)
しかし、CustomControl のレベルでバブリングを停止したいだけです。葉から最上位のコントロールの親まで、それ以上ではありません。何故ですか?フィルタリングはしていませんPreviewKeyDown
、したがって、イベントはリーフまで伝播する必要があり、その後、親に戻る必要がありますが、そうではありません。
ありがとうございました
編集: サンプルコード:
wpf - データ テンプレート内のコントロールのイベント ハンドラーをプログラムでワイヤリングする
アプリケーション全体にクリック可能な画像/長方形コントロールがあり、それらをコードで配線することを好みます。
データテンプレートで同じことを行う方法を理解するのに苦労しています。基本的に、フックを挿入できるように、テンプレートが各アイテムに適用される場所を見つける必要があります。
WPF は何らかのタイプのコマンドを使用することを推奨していることは知っていますが、それにはより多くの定型コードが必要であり、言うまでもなく、イメージ/長方形はコマンドをサポートしていないため、代わりにスタイル付きのボタン コントロールを使用してすべてをやり直す必要があります。
これは可能ですか?
wpf - CommandTargetを使用する必要がありますか?焦点を絞った要素ならどれでもコマンドを受け取ると思いました
RoutedCommandsの使用方法を理解しようとしています。ボタンでCommandTargetを指定しないと、フォーカスされた要素がコマンドを受け取るという印象を受けました。しかし、何らかの理由でそれは機能しません。動作しないxamlは次のとおりです。
CommandTargetをボタンに追加すると機能しますが、もちろん指定されているテキストボックスに対してのみ機能します。
フォーカスされた要素にコマンドを受信させるにはどうすればよいですか?
ありがとう!
windows-7 - ルート テーブルでのループバック
私は、ホスト オペレーティング システムと通常のゲートウェイ ルーターの間でトラフィックをルーティングするように構成された VMWare ゲストで、FreeBDS を使用して WAN エミュレーターを作成するプロジェクトに取り組んでいます。トラフィックが正しくリダイレクトされるようにホストのルート テーブルを変更し、ゲストで ipfw を使用してさまざまなネットワーク特性を変更する予定です。
Windows 7 では、「ROUTE -f」でルート テーブルを完全にクリアできますが、その後、ループバック アドレスのルートを再作成できません。
「ROUTE -f」でクリアする前のルートテーブルは次のとおりです。
「ROUTE -f」の後、「Active Routes:」の下のすべてのルートが Windows 7 で消えます。ほとんどの場合、127.0.0.1 のルートを再作成できません。エラー メッセージは表示されませんが、ROUTE のヘルプ テキストが表示されます。
ループバック アドレスのルートを手動で追加し直す方法を誰か教えてもらえますか?