0

Window含む要素がありますRibbonMenue。このWindow中にいくつかありUserControlsます。の 1 つはUserControlですDataGridICommandに行を追加および削除できるを作成しましたDataGrid

問題は、何らかの形で からこれらにアクセスする必要があることですがICommands、これらは宣言され、 にバインドされている にバインドさRibbonMenuれているため、「より高いレベル」(ウィンドウ) でアクセスできます。ViewModelUserControl

ICommandsグローバルに呼び出すことができるものを作成するにはどうすればよいですか? 行を削除する必要があるため、 の背後にあるICommandmy への参照が必要であることに注意してください。ViewModelUserControl

画像はそれを少し明確にします

4

2 に答える 2

0

「グローバル コマンド」を実行する従来の MVVM の方法は、CompositeCommand を使用することです。GlobalCommands という静的クラスを含む GlobalCommands.cs ファイルが作成されます。

その中に、CompositeCommand インスタンスを返す ICommand プロパティがあります。次に、コマンドに関心のある VM は、コンストラクター GlobalCommands.SomeCommand.RegisterCommand(...) でコマンドにアタッチできます。UI は GlobalCommands コマンドにアタッチされます。

そのため、GlobalCommands は空のシェル/ホルダー コマンドである CompositeCommand を保持し、VM は通常の RelayCommand を複合コマンドに登録してコマンドを処理します。複数の VM を同じコマンドで登録でき、すべてが呼び出されます。

より高度な CompositeCommand の実装には IActiveAware 機能も含まれており、CompositeCommand が「アクティブ」な vm にのみ実行可能/実行可能を送信するようにすることができます。

CompositeCommand はもともと Prism から来たものだと思いますが、多くの人 (私を含む) は Prism 以外のアプリケーションで使用するためにそれを分割しました。

于 2016-01-27T20:47:52.443 に答える