使用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();
问题在于:
我想要的是我必须能够检查是否显示了IUploadListView类型的实例,当发生这种情况时,我只是重用该实例并调用Show()。如果没有找到实例,我希望MEF为我创建它(使用服务定位器)。
有没有办法实现这个目标?
答案 0 :(得分:0)
您应该在视图或其视图模型中实现INavigationAware界面,并利用IsNavigationTarget
方法。
当为区域调用RequestNavigate
时,将调用IsNavigationTarget
以允许视图实例决定是否应该激活它。如果返回true,则视图将被激活。否则Prism将创建一个新的视图实例,将其放置在该区域并激活它。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/gg430861(v=pandp.40).aspx。