我有两个应用程序,一个是主应用程序,另一个是设计器表单应用程序。
目前,我的主要应用程序与 prism 和 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 程序集中。