私のWPFアプリケーションには、デフォルトでコマンドバインディングを持たないいくつかのボタンが含まれているツールバーがあります。アプリケーション内では、さまざまな異なるフォーム/ウィンドウを開くことができます(MDIと考える)。これらのビューのそれぞれは、コマンドをツールバーボタンに適用する共有ユーティリティに登録する責任があります。ビューモードでオブジェクトのメソッド呼び出しをトリガーするには
ツールバーと他の標準的なUIの部分は、ビューとは別のライブラリに存在し、私が言及した共有ユーティリティは、ビューにボタンをフックする唯一のインターフェイスです。ここではビューはこの機能は保存とsearchignのように、すべてのバックエンド・タスクのために偉大な働いている
public class MyView : BaseView
{
public MyView(CommandHolder commandHolder) : base(commandHolder)
{
SaveCommand = new DelegateCommand(Save,CanSave);
//RegisterCommand is a method on BaseView that works with the commandHolder object
RegisterCommand(DefaultCommands.SaveCommand, SaveCommand);
}
}
コマンドに登録する方法の使用例はあるが、今は私が存在している機能をトリガできるようにする必要があることがわかりますこれらのコマンドのいずれかからのビュー内にあります。
ここで具体的な例は、ツールバーのExcelにエクスポートボタンがあり、グリッドのデータに基づいてxlsxファイルを生成したいということです。
私はDevExpress社のコントロールを使用していますが、そのグリッドには、次のメソッド呼び出しをサポートしています。
//taken from xaml code behind
grid.ExportToXlsx(@"c:\grid_export.xlsx");
は私のコマンドのいずれかの方法でのviewmodelにへの参照を与えるこのコールのショートを誘発することができるようにする方法を実行してあります見る?
すべてのコマンドが行う場合は、そのメソッドを呼び出すと、ViewModelでコマンドを作成する必要はなくなります。コードビハインドのクリックイベントハンドラはうまくいきます。 ViewModelコマンドで心臓を設定していれば、Prism EventAggregatorのようなイベント/メッセージングパターンを使用できます。 –
その問題は最初の部分で説明しようとしたことです。ボタン自体は、このメソッドを呼び出す必要があるビューとはまったく別物です。コマンドは文字通り唯一のオプションです。 – Phaeze
@GlenThomasもう少し追加しましたうまくいけばそれをクリアする説明 – Phaeze