問題タブ [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.
wpf - DataBoundリストボックスのInputBindingsを実行するにはどうすればよいですか?
私にはListBox
限界ItemsSource
があります。誰かがを選択してListBoxItem
Enterキーを押すと、コマンドが実行されます。どうすればこれを行うことができますか?私は持ってItemContainerStyle
いますが、スタイルListBox
を設定する方法を見つけることができません。InputBindings
何か案は?
c# - wpfに複数のコマンドバインディングを追加する方法
私はWPFを使用しています。WPFアプリケーションのキーボードショートカットを作成したいと思います。以下のように作成しました。「 open 」の最初のコマンドバインディングタグは機能しており、exitのコマンドバインディングは機能していません。理由はわかりません。
上記のコードでは、次のエラーが発生しています。
属性「Command」の文字列「Exit」をタイプ「System.Windows.Input.ICommand」のオブジェクトに変換できません。CommandConverterはSystem.Stringから変換できません。マークアップファイル'WpfApplication2;component/window1.xaml'のオブジェクト'System.Windows.Input.CommandBinding'でエラーが発生しました。行80の位置25。
c# - ContextMenu コマンド バインディングが更新されない
私はすでにこの問題を抱えていますが、解決方法を思い出せません。(wpf の a contextMenu のビジュアル ツリーまたは datacontext に関連していると思います)
Combobox と ContentPresenter を持つ ParentViewModel があります。ChildViewModel のコンボボックス表示リスト。いずれかを選択すると、contentpresenter を使用して表示されます。
ChildViewModel には、リストに項目を追加するコマンドがあります。このコマンドは、ボタンにバインドされているかどうかを検出しますが、contextMenu を使用して完了すると、コマンドは最初の実行時にバインドされますが、ChildViewModel が変更された場合 (コンボボックスで別のビュー モデルが選択された場合) は変更されません。アイテムは、以前に選択された ChildViewModel に追加されます。
この問題を解決するにはどうすればよいですか?
親ビューモデル:
親ビュー:
子ビューモデル:
子ビュー
前もって感謝します
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 は特に有益なコマンド名ではありません。現在のコマンド ハンドラー (何が作成されているかなど) については何も通知しません。
私はコマンドを再利用する傾向がありますが、前述したように、実際には見たことがありません。
あなたの好みは何ですか?聞いたことのない、受け入れられている「ベスト プラクティス」はありますか? コマンドを再利用することによる明らかな問題/その他の利点はありますか?
c# - DataTemplate からカスタム ルーティング イベントを発生させるにはどうすればよいですか?
私はいくつかのオブジェクトを含むユーザー コントロールを持っていdCB_Props
ます。最も重要なのは、Observable Collection にバインドされた ComboBox です。コレクションは任意のオブジェクトを取ることができますが、通常は と呼ばれる UserControl を取りますEditDeleteItem
。dCB_Props
として使用するように設定しEditDeleteItem
ましたItemsTemplate
が、イベントが発生しません。一方、インスタンスを追加するとEditDeleteItem
、イベントが発生します。EditDeleteItem は他のコントロールをホストし、別の DataTemplates を使用する必要があるため、この方法で項目を追加することはできません。
EditDeleteItem
には、 と という 2 つのルーティング イベントがEditClick
ありDeleteClick
ます。
コレクションが変更されると、追加されたアイテムのタイプが であるかどうかを確認するイベントが発生しますEditDeleteItem
。その場合は、前述の 2 つのイベントにハンドラーを追加します。
EditDeleteClick の xaml の一部:
dCB_Props の xaml の一部:
上記の 2 つはオブジェクトのコードであることに注意してください。列の定義、イベント トリガーなどは省略しています。
dCB_Props.xaml.cs コードの一部は次のとおりです。
タイプの項目を追加し、内部にある LabelEditDeleteItem
のプロパティを削除すると、上記は機能します。以下に示す ItemTemplate をの ContentTemplate に設定した場合にも機能します。ただし、前述のように、異なるデータ テンプレートを使用する必要があるため、すべてのデータ テンプレートをリソース ディクショナリに配置する必要があり、テンプレート セレクターを使用する必要があると想定しています。ItemTemplate
dCB_Props
EditDeleteItem
データ テンプレート:
コマンドバインディングを使用する必要があると思います。しかし、CommandBindings をどこに配置すればよいか、またどのように使用すればよいかはよくわかりませんが、1、2 ページ読んだことがあります。
ありがとう、ハッサン
wpf - コマンドへのWPFバインディングFrameworkElementイベント
UserControl
のFrameworkElement
イベントをビュー モデル コマンドにバインドするにはどうすればよいですか? 私は MVVM と Prism を使用しているので、ビュー モデルをビュー間で明確に分離するとよいでしょう。
私は複数のことを試しましたが、どれもうまくいきませんでした:
このチュートリアルも使用http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html
コード ビハインドにいくつかの機能を追加する以外に選択肢はありませんか?
上記の試行はどちらもエラーになりませんが、コマンドは実行されません。
ここに私のビューモデルがあります:
wpf - トンネリング コマンド
ListBox でインスタンス化されたユーザー コントロールがいくつかあります。Window に を発生させるボタンと、それを実行できるようにNavigationCommands.Refresh
するCanExecute
ハンドラがあります。
これらの動的に作成されたユーザー コントロール (ListBox の ItemTemplate 内で作成) のそれぞれに、NavigationCommands.Refresh
. ウィンドウ内のボタンをクリックすると、各ユーザー コントロールで設定したハンドラーが起動しませんか? 各 UC にトンネリングするコマンドが必要ですが、そうではありません。
c# - どのApplicationCommandsが.NetFrameworkWPFコントロール(コピー&ペーストなど)を実装しているかを知る方法は?
フレームワークで提供されるコントロールによってどのコマンドが実装されているかをどうやって知ることができるのだろうかと思っていました。たとえば、ImageがApplicationCommands.Copyコマンドを実装しているかどうかをどのように知ることができますか?または、TextBoxがApplicationCommands.Copy、ApplicationCommands.Cut、ApplicationCommands.Pasteを実装している場合はどうなりますか?
MSDNから抽出:
一部のコントロールには、一部のコマンドのCommandBindingsが組み込まれています。このメカニズムにより、コマンドのセマンティクスを同じに保つことができますが、実際の実装は変更できます。たとえば、TextBoxは、画像をサポートするように設計されたコントロールとは異なる方法で貼り付けコマンドを処理しますが、何かを貼り付けることの意味の基本的な考え方は同じです。コマンドロジックはコマンドで指定することはできませんが、コントロールまたはアプリケーションで指定する必要があります。前もって感謝します。
wpf - MVVM - WPF コマンド バインディング標準に関するもの
私は MVVM 設計モデルについてかなりよく理解していると思いますが、WPF、コマンド バインディング、およびそれらをどのように使用するつもりなのかに関して、私はそれについて不満を持っています。
コマンドを XAML に直接バインドするには、ViewModel 内に ICommand インターフェイスを実装する必要があります。現在、ICommand インターフェイスは PresentationCore.DLL の一部です。間違っている場合は、ベースの .NET フレームワークではなく WPF の一部です。
ViewModel と Model の要点は、完全に UI に依存しないことではないでしょうか? たとえば、ViewModel に ICommand を実装し、それをデータ コンテキストとして使用して XAML からコマンドをバインドする場合、ViewModel は WPF フレームワーク (特に PresentationCore.Dll) に依存しません。
つまり、たとえば Windows フォーム環境でモデルとビューモデルを使用しようとすると、WPF フレームワークではなく Windows フォームを使用しているため、PresentationCore.DLL を参照する必要はありません。 .
これは私には少し奇妙に思えます。ここで何か不足していますか? Model と ViewModel を UI と UI Framework から完全に独立させながら、XAML で Command バインディングを利用できるようにする別の方法はありますか?
前もって感謝します!