私は2つのアプリケーションを持っています.1つはメインアプリケーションで、もう1つはデザイナーフォームアプリケーションです。View用のViewModelを別のViewModelに置き換えます。
現在のところ、私の主なアプリケーションはプリズムとmefで作業しています。私の主なアプリケーションのビューの一部は、データ入力フォームです。デザイナーフォームアプリケーションから私が望むのは、データ入力フォームビューをロードして編集できるようにすることですが、これを行うには設計目的に別のビューモデルを使用したいと考えています。フォームを通常のビューモデルに付けてデータなどを取得しようとしません。
MEFを使用すると、通常のビューモデルではなく別のエクスポートを提供することができますか?理想的には、メインアプリケーションのviewmodelを置き換えるだけなので、代わりにそれを使用します。
これは私の例の図であり、のviewmodel
[Export("PatientDetailView")]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class PatientDetailView : UserControl
{
[ImportingConstructor]
public PatientDetailView(PatientDetailViewModel viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
}
}
そして、ここをインポートすると、私の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
}
}
UPDATE:
ザ・上記は患者モジュールに含まれているアセンブリ。これは、メインアプリケーションのためにどのように動作するのでしょうか。 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アセンブリに含まれます。
返信いただきありがとうございます。私の問題は、私が望むViewModelだけをどのように含めるかわかりません。 他のVMをデザイナーアプリケーションでエクスポートすることはできますが、2つのエクスポートがあります。このエクスポートを新しいものに置き換えることはできますか? –
あなたは別々のアセンブリに各VMを置くことはできませんし、それらのアセンブリの1つだけをアプリケーションごとに含めることはできませんか? – stijn
実際、ViewModelは、同じアセンブリ内でViewとともに移動する必要があります。このモジュールの一部ですが、設計者の目的のために、別のアセンブリでは少し間違っているように見えます。私は、MEFがホットスワッピングコンポーネントのすべてであると思っていました。 –