問題タブ [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 に答える
1178 参照

wpf - WPF:バインドされたコマンドを実行できないときにボタン(分割ボタン)を有効にする方法は?

2 つの重なり合うボタンとポップアップで構成されるカスタム分割ボタンを構築しています - このように (画像はいくつかの一般的な分割ボタンを示しています):

SplitButton http://windowsclient.net/wf/blogs/jfoscoding/splitbutton.PNG

私のSplitButtonは、矢印のある右側がクリックされるとポップアップを開き、メインボタンがクリックされるとSplitButton.Commandを実行します。

ただし、私の場合、デフォルトのアクションが実行できない場合があり、その場合、メインボタンがクリックされたときに、代わりにポップアップを開きたいと思います。

私はそれを達成しましたが、問題はこれです:

  • SplitButton は ToggleButton からサブクラス化されます
  • ControlTemplate には、ToggleButton (一番下) と Button (短く、一番上にオーバーレイ) があります。
  • Button.Command="{TemplateBinding Command}"(私ができるように<SplitButton Command="{Binding MyDefaultAction}">...
  • 問題: コマンドが実行できない場合、SplitButton 全体が無効になります。

同じコマンドを使い続けたいのですが、ボタンの動作をオーバーライドして、Command.CanExecute() が false を返したときにボタンが無効にならないようにします。これどうやってするの?

ありがとうございました!

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

wpf - コマンド パラメーターを相対ソースにバインドするのに役立ちます

ListBox追加したがありContextMenuます。内の項目の 1 つをContextMenuコマンドにバインドし、そのコマンドに渡されるパラメーターをListBoxコントロールの現在選択されている項目にしたいと考えています。これが私のxamlです:

これListBoxは、ビュー モデル オブジェクトにバインドされたユーザー コントロールの一部です。基になるオブジェクトのコマンド メソッドが呼び出されますが、渡されるパラメーターは常に null です。

CommandParameterto のバインドを単純に変更してテストした{Binding}ところ、ユーザー コントロールのデータ コンテキストがメソッドに渡されました。その結果、コマンドが機能し、パラメーターが正しく渡されていることがわかりました。ListBoxSelectedItemプロパティにアクセスするための正しいバインディングを取得できないようです。

ヘルプ?

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

c# - MVVM コマンド バインディング

私はMVVMパターンを学ぼうとしています。私が抱えている主な問題は、コマンド オブジェクトを宣言、作成、バインドする場所を学習することです。

2 つの例:

  1. スイッチ ボードまたはメイン メニューのように機能するメイン フォームがあります。選択ボタン 1 とビュー 1 が表示され、選択ボタン 2 とビュー 2 が表示されます。偉大な。ここで、メイン フォームに戻りたいので、ビュー 1 (およびビュー 2) に「メイン メニュー」というボタンが必要です。「ShowMainMenu」コマンドにバインドできるようにするには、コマンドとコマンド ハンドラをどこで定義すればよいですか? View2ViewModel でそれらを作成できますが、メイン ビューを表示するアクセス権がありませんか? または、MainView モデルで thim を作成することもできますが、子ビュー モデルでそれらにバインドするにはどうすればよいですか (mvvm の推奨事項に従って RelayCommand obejct を使用しており、親にバブルアップしません)。

  2. 1 つのメイン ウィンドウ ビューに 2 つのユーザー コントロールが表示されています。これらを MainView、UC1、および UC2 と呼びましょう。これらのそれぞれには、ViewModel MainViewModel、UC1ViewModel、UC2View Model があります。UC1 に「AddItem」というボタンがあります。UC2 のリストにアイテムを追加する必要があります。「AddItemCommand」を設定してバインドする正しい方法は何ですか。コマンドは、MainViewModel、Uc1ViewModel、または UC2ViewModel にある必要がありますか? そして、どのように私はそれにバインドする必要があります。

ご協力いただきありがとうございます。

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

wpf - ユーザーコントロールへのコマンドバインディングドラッグ/ドロップ

WPFのコマンドパターンを使用して、ユーザーコントロールのドラッグアンドドロップイベントに応答するUIを作成するにはどうすればよいですか?

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

wpf - ListBox.ItemTemplate として使用される UserControl のコマンド バインド

私は をListboxとしてUserControl持っていDataTemplateます。これUserControlにはButton、リストからそのアイテムを削除するための があります。

は次のItemsSourceように定義されます。

これがUserControl簡略化されたものです:

ユーザーがRemoveボタンをクリックすると、このアイテムが から削除されますObservableCollection

問題は、DataContextfor eachListBoxItemが、 を保持する ViewModel とは異なる ViewModel であることObservableCollectionです。

RemoveボタンをICommand「親」ビューモデルにバインドする方法がわかりません。どんな助けでも大歓迎です。本当にありがとう。

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

wpf - WPF でのコマンド バインディング メモリ リーク

RoutedUICommand への CommandBinding を持つユーザー コントロールを作成すると、メモリ リークが発生するのではないかと心配しています。

シナリオ:

RoutedUICommand を c クラスの static として使用し、コマンドを格納します。ユーザー コントロールに CommandBindings を実装します。ユーザー コントロールをメイン フォームに追加します。メイン フォームからユーザー コントロールを削除し、それへの参照を null に設定します。

コマンド バインディングの canExecute は引き続き起動します。UserControl への参照がないため、リークしています。フォームが閉じられた後も長時間発火し続けます。(停止するのを見たことがありません)ガベージコレクションを強制すると、収集されます(canExecuteの起動が停止します)

これを説明するテストプロジェクトがあります。メソッドを起動するオブジェクトのハッシュ コードを出力する canExecute に Console.WriteLine があります。新しいユーザー コントロールを追加するためのボタンと、それを削除するためのボタンがあります。

これは気にしなくていいのでしょうか?強制された場合、ユーザーコントロールは収集されます。これは、次のコレクションで収集されるということですか? アプリのパフォーマンスの低下に気づき、メモリ リークなどを追跡しています。多くの UI 要素を含む複雑なフォームがあり、レイアウトから削除すると、プロセッサとメモリ領域を使い果たしています。(多くのコマンドを使用します) ビジュアル ツリーから何かを削除すると、ルーティング イベントを受信できなくなると思いました。私は何が欠けていますか?

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

wpf - 要素がビジュアル ツリーから削除された後、どのように commandBinding の CanExecute を起動できますか?

ここで関連する質問があります。ここでは、コマンド バインディングを使用したユーザー コントロールがあります。ユーザー コントロールはビジュアル ツリーから削除されていますが、canExecute はまだ起動しています。コマンディング モデルについての私の理解では、ルーティング イベントのようにバブリングしてトンネリングするというものでした。では、コマンド バインディングがアタッチされた要素がビジュアル ツリーに存在しなくなったら、どのように CanExecute を起動できるでしょうか。

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

wpf - WPF MVVM:コントロールへのICommandバインディング

MVVMで使用されているコマンドバインディングを完全に失いました。オブジェクトをウィンドウにバインドしたり、そのコマンドをコントロールにバインドして、メソッドを取得するにはどうすればよいButton Clickですか?

これがCustomerViewModelクラスです:

ViewModelBaseINotifyPropertyChangedインターフェイスを実装しますButton。コマンドにバインドする方法は次のとおりです。

のインスタンスは、を含むウィンドウのにCustomerViewModel割り当てられます。DataContextButton

与えられた例は機能していません:メソッドにブレークポイントを入れましたSaveが、実行がメソッドに渡されません。私は(スタックオーバーフローでも)多くの例を見てきましたが、バインディングをどのように指定すべきか理解できません。

アドバイスしてください、どんな助けでもありがたいです。

ありがとう。

PSおそらく私RelativeSourceはボタンバインディングで指定する必要があります...このようなもの:

しかし、どのタイプを祖先に指定する必要がありますか?

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

wpf - コマンドへの ListBox MouseBinding が機能しない

MouseDoubleClick (または PreviewMouseDoubleClick) を、カスタム WPF Control で定義されたカスタム Commandにバインドしたいと考えています。

問題は、それが機能しないことです。

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

c# - コマンドから UI を変更する - WPF でコマンド バインディングを使用する

私の WPF アプリケーションには、TextBox と Button があります。ボタンには、テキストに対して何かを行うコマンドにバインドされたコマンドがあります。

ここで、ボタンをクリックして TextBox もクリアするアクションが必要です。これを行う最善の方法は何ですか?2 つのオプションが表示されます。

Button にも Click イベントを追加して、テキストを明確にすることができます。これは、アクションが正しく実行される順序に依存して、アクションを 2 つの場所に分割することになるため、私には良い考えのようには思えません。

ここで使用したオプションは、TextBox.Text プロパティの代わりに TextBox 全体を渡すことです。そうすることで、コマンドは最初にテキストを取得して使用し、次に TextBox をクリアできます。私のバインディングは同じですが、「パス」はありません:

そして、私のコマンドの重要な部分:

これに関する私の問題は、コマンドが UI コンポーネントに依存するようになったことと、UI がコマンドに実際に変更を加えることに依存していることです。私はこれに満足しているわけではありません。より良い方法はありますか?