問題タブ [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.
wpf - キーボードショートカットのコマンドルーティング
基本的に、ウィンドウのスコープ内で有効であり、フォーカスがウィンドウをバインドするコントロール内にあるときに有効になるだけでなく、キーボードショートカットを作成したいと思います。
さらに詳細に....
3つのコントロールがあるウィンドウがあります。
- ツールバー
- テキストボックス
- カスタムコントロール
ツールバーには、コマンドCustomCommands.CmdA
にバインドされ、キーボードショートカットCtrl+にリンクされたボタンがありますT。
私のカスタムコントロールはを処理できますCmdA
。アプリを実行してカスタムコントロールをクリックすると、CmdA
有効になり、正常に動作します。また、 Ctrl+Tはコマンドを起動させます。
ただし、テキストボックスを選択すると、カスタムコマンドCmdA
が無効になります。
CmdA
のボタンのコマンドターゲットを設定することで、これを修正できます。これで、textBoxを選択すると、CmdA
まだ有効になっています。
しかし、キーボードショートカットCtrl+Tは何もしません。
キーボードショートカットの範囲を変更する簡単な方法はありますか?または、キーを下のどこかでキャッチし、それが関連するコマンドを見つけて自分でルーティングする必要があります(そうであれば、これを行うためのフレームワークがありますか?)
wpf - WPF と MVVM。バインディング イベント
MVVM パターン、RelayCommand などを使用して WPF アプリケーションを開発しています。
私がやりたいことは、たとえば楕円などの形状を移動し、その最終的な位置を取得してデータベースに入れることだけです。
しかし、イベント (MouseLetButtonDown、MouseLeftButtonUp、および MouseMove) をコマンドにバインドできません。アタッチされたビヘイビアについて読みましたが、位置を取得するにはイベントの引数 (MouseButtonEventArgs と MouseEventArgs) が必要です。
解決?
mvvm - MVVMでのSilverlightマルチコマンドバインディング
MVVMを使用してSilverlightアプリケーションの構築を開始しています。XAMLページにボタンがあり、クリックするとデータを保存できるようになります。次のコードを記述しました。
ビューモデルクラスでは、次のコードを実装しています。
私の保存コマンドではどの種類が機能しますか。私が持っている質問は、ページに複数のボタンがある場合、ボタンごとに上記と同じコードを記述する必要がありますか?どんな体もより良い方法を提案できますか?
mvvm - WPFRibbonControlコマンド
MicrosoftのWPFRibbonControlライブラリをいじり始めました(2010年10月リリース)。ICommand実装が利用可能になり、よりMVVMに適した実装としてRibbonCommandに取って代わったようです。
ただし、標準のボタンの場合のように、viewmodelコマンド(私の場合はプリズムDelegateCommandとして)をビューにデータバインドすることはできませんでした。
これが基本的に私が探しているものです:
ViewModelの場合:
XAMLの場合:
ただし、コマンドがトリガーされることはありません。どんなヒントでも大歓迎です。
wpf - シンプルな WPF MVVM コマンドの問題 - このコードの問題点は何ですか?
MVVM を使用して UI のボタンにコマンドを設定しようとしています。ただし、ボタンをクリックしてもコマンドは実行されません。このコードは、Jason Dolinger の例(3 番目の段落のリンク) に基づいています。
かなり単純なはずなので、何が悪いのかを見つけたら、きっとばかげていると思います。
関連するコード ビットが続きます。コマンドは次のとおりです (非常に単純です)。
XAML は次のようになります。
ビューモデルは次のようになります。
wpf - リストボックスアイテム内のコマンドをビューモデルの親のプロパティにバインドする
私はこれに約1時間取り組んでおり、関連するすべてのSOの質問を調べました。
私の問題は非常に単純です:
私はHomePageVieModelを持っています:
私のマークアップ:
リストはすべての項目で問題なく表示されますが、私の人生では、コマンドに対して何をしようとしても機能しません。
私はいつも得る:
System.Windows.Dataエラー:4:参照とのバインドのソースが見つかりません....。
更新 ViewModelをこのように設定していますか?これが重要だとは思わなかった:
魔法を実行するMVVMLightツールキットのViewModelLocatorクラスを使用します。
c# - WPF MVVMコマンド:複数のコマンドパラメーター
おそらく私の問題は機能的というよりはアーキテクチャ的ですが、TextBoxをコマンドにバインドしようとしています。そのコマンドで、複数のパラメーター(つまり、カスタムオブジェクト)を渡したいと思います。宣言型(xaml)でこれを行う方法がわかりません。
ViewA(ViewModelAの上にあります)には、 CommandX にバインドされたTextBoxがあります
ViewB(ViewModelBの上にあります) (これは実際にはViewAと同じウィンドウ内の別のユーザーコントロールです) commandXが起動すると、ViewModelBは何らかのメソッドを実行する必要があります。ViewModelBは、そのメソッドを実行する前に、複数のプロパティで更新する必要があります。
私の質問は、ViewModelBがそのメソッドを実行するのに十分な情報を持つように、コマンド/アーキテクチャをどのように構造化できるかということです。
補足:ViewModelAには、ViewModelBがそのメソッドを実行するために必要なすべての情報があります。しかし、後でCommandXを別のビューから実行したいので、そこから取得したくありません。
アップデート
CommandParameterプロパティを個別に設定できるようです。これは、ViewModelAの複合型にバインドされる可能性があります。これは、必要なすべてのプロパティをそれに満たすのに十分なはずです。
驚くばかり
これはうまくいきました!これが私のparmeterプロパティがViewAでどのように見えるかです
およびボタンの実装
アップデート
このソリューションには小さな障害があります。commandparameterはプロパティにバインドされています。ただし、コマンドの実行時ではなく、ロード時に取得します。すべてのプロパティが最新の値を持つように、コマンド実行時に発生する必要があります。それを達成する方法についてのアイデアはありますか?
wpf - マルチウィンドウ WPF アプリでのコマンド バインディング
私のアプリケーションは、複数のデザイナー ウィンドウを持つことができます。各ウィンドウは、RelayCommands を使用して動的に通信する複数のユーザー コントロールで構成されます。指揮インフラストラクチャのバックボーンとして、次のクラスを作成しました。
ユーザーコントロールの各ビューモデルは、コンストラクターで次のようなことを行います
ただし、アプリケーションが複数のウィンドウを持つことができるという点を完全に見逃していました。各ウィンドウが開かれると、その特定のウィンドウに対して静的コマンドが設定されます。
例:
ウィンドウ A が開かれます。usercontrols のコンストラクターが RelayCommands を設定し、すべて問題ありません。
ウィンドウ B が開きました。ユーザー コントロールのコンストラクターが RelayCommands を設定します。ウィンドウ A のコマンド バインドが失われました。
そのため、タブをウィンドウ A (ウィンドウはタブ付き) に変更すると、コマンドが機能しません。
タブを変更すると、アクティブなウィンドウが常にコマンドを設定するように、いくつかのアイデアが必要です。コマンドを tab_selection_changed イベントに入れようとすることはできますが、どういうわけか私には見栄えが悪いです。これを行う適切な方法はありますか?どんな助けでも大歓迎です。
編集:
この質問は、読者の間で少し混乱を招きました。コマンドに対して複数のサブスクライバーを作成しようとしているわけではありません。どの時点でも、アクティブなウィンドウは 1 つだけです。このウィンドウはいくつかのユーザー コントロールで構成されており、その一部はコマンドを使用して動的にロードされます。ただし、各コマンドは単一のビュー モデル クラスによって処理されるため、複数のサブスクライバーはありません。私の問題は、アプリケーションが複数のウィンドウをタブにロードできることです。特定の時点でアクティブなウィンドウは1つだけですが、ユーザーは別のタブで別のウィンドウをアクティブにすることができます。ビュー モデル コンストラクターが静的 RelayCommands を割り当てると、新しいウィンドウが読み込まれるたびに静的コマンドが新しいバインディングに設定されます。
ウィンドウ 開いたウィンドウ ビュー モデル コンストラクターは、静的コマンド バインドをそのオブジェクト コマンド ハンドラーに設定します。ウィンドウ A がアクティブです。指揮はいいです。
Window B loaded-window B ビュー モデル コンストラクターは、静的コマンド バインドをそのオブジェクト コマンド ハンドラーに設定します。ウィンドウ B がアクティブです。指揮はいいです。
ここで、[ウィンドウ A] タブを選択して、ウィンドウ A をアクティブに設定します。指揮は効かない。もちろん、コマンドはウィンドウ B コマンド ハンドラーにバインドされているため、問題はありません。
理論的には静的コマンドは、任意の時点でアクティブなウィンドウが 1 つしかないため、シナリオを処理できます。しかし、どのように??
c# - C#ActionCommand:ICommandのVB.netへの変換
ICommandを実装し、ExecuteとCanExecuteのデリゲートに基づくC#クラスActionCommandを見つけました。これまでのところ私には完璧に見えます。
今、私はそれを必要なVB.netバリアントに翻訳しました(コードトランスレーターといくつかのハンズオンを使用して)
私の問題は、CanExecuteChangedと、CommandManager.RequerySuggestedからCanExecuteChangedへのイベントの登録/マッピングに関するものです。オンラインコードトランスレータは次のことを提案します。
しかし、これはICommand.CanExecuteChangedを満足させることはできません。誰かがこれを翻訳または解決する方法を手伝ってもらえますか?
c# - 単体テストで Command.CanExecute が常に false を返すのはなぜですか?
私の貼り付けコマンドは、通常の実行中に機能するようですが、単体テストではCanExecute
メソッドは常に を返しますfalse
。
コード:
単体テスト: