使用 Silverlight 5、Prism 4.1 和 MEF。
我有一个视图,由其界面导出。
样本:
[Export(typeof(IUploadListView)), PartCreationPolicy(CreationPolicy.NonShared)]
public partial class UploadListView : RadWindow, IUploadListView
{
}
我有一个模型(比如说一个主菜单模型),它想重复使用这个视图 2 次。视图的每个实例都必须被调用并只显示一次。我更改了底层视图模型上的 UploadType,以便行为会改变。
样本:
var view = this.serviceLocator.GetInstance<IUploadListView>();
view.UploadListViewModel.UploadType = UploadType.MyType1;
view.Show();
和其他菜单选项:
var view = this.serviceLocator.GetInstance<IUploadListView>();
view.UploadListViewModel.UploadType = UploadType.MyType2;
view.Show();
问题是这样的:
- 使用 NonShared 策略时,我确实得到了可显示的唯一实例。问题在于,当用户按下相同的菜单项时,实例会显示两次(或更多次)。
- 使用共享策略时,当显示第一个视图时,第二个菜单项将重用第一个视图,因此只显示一个视图。
我想要的是我必须能够检查是否显示了 IUploadListView 类型的实例,当发生这种情况时,我只需重用该实例并调用 Show()。当没有找到实例时,我希望 MEF 为我创建它(使用服务定位器)。
有没有办法做到这一点?