問題タブ [commandbinding]

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 に答える
1198 参照

wpf - MVVM の複数のコマンド ハンドラ

私のアプリケーション レイヤーは、DialogPresenters を使用して、さまざまなダイアログ (モーダル、スプラッシュ スクリーンなど) にいくつかの ViewModel を表示します。

このセットアップは非常にうまく機能しますが、ViewModel が CancelCommand で何かを行う必要があると判断した場合 (これは完全に合理的です)、プレゼンターの Terminate() への呼び出しを置き換えるか、その逆を行います。

私がやりたいことは次のとおりです。

イベント ハンドラーをアタッチするのと同じ精神で。

  1. これは C#.NET 3.5 で可能ですか?
  2. どうすればそれを達成できますか?
  3. これは悪い MVVM プラクティスですか?

ありがとう

D

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

wpf - WPFCustomControlコマンドとデータバインディング

さて、私はそれを問題にスリム化するためにDialogと呼ばれるカスタムコントロールを持っていますこれが私のvb.netコードです:

これが私のxamlです:

しかし、YesCommandは機能していないようですが、OkCommandを配置すると機能するので、コードビハインド(または制御コード)で定義および設定されているコマンドにバインドできないのはなぜですか?

0 投票する
5 に答える
9683 参照

c# - WPF でのキーバインド

私はWPFが初めてで、構築中のアプリケーションで、VistaやWindows 7のWindowsエクスプローラーと同じように、Altキーが押されたときにメインメニューを表示したいと思います。修飾子だけでキーバインドを使用してみました設定しましたが、うまくいかないようです。

これまでのコードは次のとおりです。

p>

また、フォーカスが失われたときにメニューが消えるようにしたいと思います。

何か案は?

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

wpf - 同じコントロールの同じ Command に対して複数の CommandBinding を使用できますか?

特定のコマンドを処理するために CommandBindings コレクションに CommandBinding を追加する UserControl があります。後で、このコントロールをウィンドウで使用し、同じコントロールに別のバインディングを追加して、追加の動作を追加したいと考えています。ただし、問題は、これを行うと、別の CommandBinding をコントロールの CommandBindings コレクションに追加すると、同じコマンドに対して既に作成されているバインディングが置き換えられるように見えることです。コントロールは、コントロールごとに 1 つの CommandBinding しか持つことができないように見えますが、これは正しいですか?

同じ保存コマンドに対して 2 つの CommandBinding を設定しようとする以下のコード例を参照してください。

もともと、このコードを書いたとき、コンパイル時または実行時例外のいずれかを予期していましたが、文句を言わなかったことに驚きました。次に、 CommandBinding_Executed ハンドラーが 2 回ではなく 1 回しか呼び出されないので、期待していたのにがっかりしました。

更新: 少しテストした後、2 番目の CommandBinding が最初の CommandBinding を上書きしていないように見えますが、代わりに、イベント ハンドラーで Handled を true に設定していなくても、最初のコマンド バインディングが Command を飲み込んでいるように見えます。この時点で、私の問題の解決策は、Handled が true に設定されていない場合でも、ルーティングされたコマンドが最初のハンドラーを超えて伝播しない理由を理解することであると確信しています。

更新: WPF でのコマンド ルーティングの背後にある奇妙な動作のいくつかを確認する、このちょっとした情報を 見つけました。

更新: コマンドごとに 1 つの有効な CommandBinding しか存在できないように見えるという事実を回避する方法についての 1 つの考えは、デフォルトの CommandBinding クラスが Executed および CanExecute をイベントとして公開しているように見えることです。もちろん、すべてのイベントと同様に複数のハンドラーを持つことができます。 . その場合のアイデアは、標準の CommandBindings.Add メソッド以外の方法を使用して、追加のハンドラーをコマンドに追加することです。おそらく、これは Control クラスの拡張メソッドを介して実行でき、カスタムの CompositeCommandBinding クラスと組み合わせて、1 つのメイン バインディング内に複数のバインディングを集約できます。

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

wpf - WPF 2つのコマンドハンドラー、1つのコマンド

サードパーティのコントロールから派生しています。ApplicationCommands.SelectAllを実装しています。しかし、私が望む振る舞いは少し異なります。オーバーライドできる仮想メソッドはありません。クラスハンドラーを登録すると、次のようになります。

私のメソッドは呼び出されません。私が派生しているサードパーティのコントロールはマーキングです

e.Handled=true;

そのコマンドハンドラーで(私はこの原因を知っていますが、ソースを見ましたが、それを変更することはできません)

私に何ができる?

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

c# - 依存関係プロパティの値を「リアルタイム」で変更できるようにする WPF のカスタム コマンド

MinValueカスタム コントロールで、タイプのカスタム Dependency Property が呼び出されるシナリオがありintます。

ユーザーがキーボード入力 Ctrl++ (増加) および Ctrl+- (減少) を介してその値を変更できるようにしたいと考えています。これはコマンドで実行できることは理解していますが、それらのコマンドをどこに実装すればよいかわかりません。ユーザーは、ウィンドウ内のどのコントロールにフォーカスがあっても、前述のキーボード ショートカットを使用できる必要があります。

そのコントロールだけがキーボード ショートカットの操作方法を知っているため、カスタム コントロールに Command を実装する必要があると思いますが、カスタム コントロールでいっぱいのリスト ボックスがあり、それぞれがショートカットを処理する必要があるため、方法がわかりません。それはうまくいくでしょう。ポインタはありますか?いつもありがとう!

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

c# - WPF で、親のプロパティにバインドするコントロール テンプレートのコマンドを取得するにはどうすればよいですか?

私はWPFに比較的慣れていないため、頭が爆発することがあります。ただし、特に MVVM モデルで使用する場合は、その背後にある力が気に入っています。

ControlTemplate含む がありButtonます。ControlTemplateカスタム コントロール内で使用します。Button内のコマンド プロパティにバインドするカスタム コントロールにプロパティを追加したいと考えていControlTemplateます。基本的に、ユーザーが検索ダイアログをポップアップできるようにするために、その右側に がありますComboBoxButtonこのコントロールはユーザーコントロールに複数回表示される可能性があるため、各コントロールを異なるコマンド (製品の検索、顧客の検索など) に潜在的にバインドできるようにする必要があります。

しかし、私はこれを行う方法を理解できませんでした。

XAML のサンプルを次に示します。

私は次のようなことをすることでそれを機能させることができると思いました:

しかし、それは機能しません。

どんな助けでも大歓迎です。

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

wpf - Canvas での WPF コマンドの使用が機能しない

から派生したカスタム キャンバスを使用していCanvasます。/ /などApplicationCommandsのようなものはほとんど含まれていません。このように追加されています -NewOpenSave

New_Enabled常に true を返します。

このコントロールは、メニュー バーを持つ wpf プロジェクトで使用されます。このメニューバーには、新規/開く/保存メニューボタンがあり、CommandそれぞれApplicationCommand次のように設定されています-

フォーカスがある場合はコマンドが正しく機能しますがCanvas、フォーカスが他のコントロールに移動するとすぐに、[新規] ボタンが無効になります。メインウィンドウに設定しようとしCommandTargetましたが、それも機能しません。

これが発生する理由と、[新しいメニュー] ボタンが常に有効になるようにするにはどうすればよいですか?

0 投票する
3 に答える
897 参照

wpf - WPF CommandBinding はトップ レベルの item/Window/this ではありません

私が望んでいたのは、タブごとに異なるバインドが必要だったので、タブを切り替えるとコマンドの可用性が切り替わりました。CommandBindings はそのように機能すると思いました。

しかし、この単純なサンプルを機能させるために最後の時間を費やしました。私が根本的に誤解している (そしてそれが最初ではない) か、何かが間違っているかのどちらかです。

CommandBinding を textBoxA に追加しますが、textBoxB には追加しません。それらの間を移動すると、対応するコマンドに設定されているボタンが有効または無効になります。

Window に CommandBinding を追加すると、ボタンは問題なく有効になりますが、そのようなものは、アイテム固有の CommandBinding の要点全体を殺します。

この XAML の使用

このコード ビハインドの使用

このコードを試してみると、あるテキストボックスから別のテキストボックスに移動しても、ボタンが無効のままであることがわかります。(ただし、textBoxA はボタンの CommandBinding を実装しているため、ボタンを有効にする必要があります)。

これはどのように機能するはずですか?

前もって感謝します。