2 つのアプリケーションがあります。1 つはメイン アプリケーションで、もう 1 つはデザイナー フォーム アプリケーションです。
現時点では、主なアプリケーションでプリズムと mef を使用しています。メイン アプリケーションの一部のビューは、単なるデータ入力フォームです。デザイナー フォーム アプリケーションに必要なのは、データ入力フォーム ビューを読み込んで編集できるようにすることですが、これを行うには、設計目的で別のビューモデルを使用したいと考えています。フォームを通常のビューモデルにアタッチしてデータなどを取得しようとはしません.
MEF を使用して別のエクスポートを提供し、通常のビューモデルの代わりにこれを取得するにはどうすればよいでしょうか? 理想的には、メイン アプリケーションのビューモデルを置き換えるだけなので、代わりにそれを使用します。
これは、ビューモデルをインポートする私のビューの例です
[Export("PatientDetailView")]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class PatientDetailView : UserControl
{
[ImportingConstructor]
public PatientDetailView(PatientDetailViewModel viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
}
}
そして、これが私のビューモデルの基礎です:
[Export(typeof(PatientDetailViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class PatientDetailViewModel : ViewModelBase, IRegionManagerAware
{
[ImportingConstructor]
public PatientDetailViewModel(IEventAggregator eventAggregator, IDialogService dialogService, IRegionManager regionManager)
: base(eventAggregator, dialogService, regionManager)
{
//Contains Commands etc for Saving Patient Detail Record
//Receiving patient detail etc
}
}
アップデート:
上記は、患者モジュールアセンブリに含まれています。これは、メイン アプリケーションの場合と同じように機能します。Designer アプリケーションでは、上記のビュー モデルを次のようなものに置き換えたいと考えています。
[Export(typeof(PatientDetailViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class PatientDetailViewModel : ViewModelBase, IRegionManagerAware
{
[ImportingConstructor]
public PatientDetailViewModel(IEventAggregator eventAggregator, IDialogService dialogService, IRegionManager regionManager)
: base(eventAggregator, dialogService, regionManager)
{
//Contains Commands etc for Designing the form
//No commands from the original VM so changes how it tries to work.
}
}
上記は、メイン アプリケーションのデフォルトの動作をオーバーライドするために機能しています。この VM は、Designer アセンブリまたは別の designerVMs アセンブリに含まれます。