【问题标题】:How to reuse views in prism/mef如何在 prism/mef 中重用视图
【发布时间】:2012-10-17 07:35:48
【问题描述】:

使用 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 为我创建它(使用服务定位器)。

有没有办法做到这一点?

【问题讨论】:

    标签: silverlight prism mef


    【解决方案1】:

    您应该在您的视图或其视图模型中实现INavigationAware 接口,并利用IsNavigationTarget 方法。

    当为区域调用RequestNavigate 时,将调用IsNavigationTarget 以允许视图实例决定是否应该激活它。如果它返回 true,则视图将被激活。否则 Prism 将创建视图的新实例,将其放置在区域中并激活它。

    更多详情请见http://msdn.microsoft.com/en-us/library/gg430861(v=pandp.40).aspx

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多