【问题标题】:How to add views to an itemscontrol in Prism with MEF and WPF如何使用 MEF 和 WPF 将视图添加到 Prism 中的项目控件
【发布时间】:2011-03-26 08:10:49
【问题描述】:

我有一个应用程序,到目前为止只有 2 个视图。视图 1 是一个列表,第二个是详细视图(一旦您在视图 1 中选择了一个项目。

我在我的 Prism shell 中设置了一个区域,可以加载我的模块。我想要的是最初只加载模块 1。当我从 1 中选择了一个项目时,我想导航到 2(然后它会显示在我的 itemscontrol 中(顺便说一下,它是一个选项卡控件)。

我遇到的问题是我要么得到 a) 两个视图最初都显示在我的选项卡控件中。

b) 如果我将视图 b 的模块上的导出属性更改为按需初始化,当我单击导航到视图 b 时,没有任何反应。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 我认为这与我使用视图发现而不是视图注入有关。认为我应该使用视图注入。只需要弄清楚如何让视图模型1调用容器来创建视图2。我认为。

标签: wpf mef prism-4


【解决方案1】:

我通过让所有视图被发现来解决这个问题,但是在视图初始化时,我停用所有视图,接受我感兴趣的视图。当然我正在寻找更好的方法:)

foreach (var view in RegionManager.Regions["RegionFoo"].Views)
{
  if (view.GetType() == initialViewType)
  {
     RegionManager.Regions["RegionFoo"].Activate(view);
  }
  else
  {
     RegionManager.Regions["RegionFoo"].Deactivate(view);
  }
}

我会在该地区的发现注册视图后执行此操作。 initialViewType 是您希望查找的视图类型。这假设只有一个单例视图。

【讨论】:

  • 感谢您的回复。我更改了代码以在视图 1 的视图模型中注入新的视图 2。我现在遇到的问题是我需要由我的容器创建新视图 2 - 不知道如何在我的视图模型中获取容器上的处理程序。 regionManager.Regions["MainRegion"].Add(new Views.ReleaseView()); regionManager.RequestNavigate("MainRegion", new Uri("ReleaseView", UriKind.Relative));'
  • 最终从我的引导程序中导出了 CompositionContainer,然后将其导入以在视图模型中使用。再次感谢。
  • 是的,我也使用过这种技术。 :)
  • @obaylis 您可以将容器自己注入到视图模型中。您只需要从容器中解析视图模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2012-02-06
  • 1970-01-01
  • 2023-03-29
  • 2015-02-03
  • 2013-05-05
  • 2011-01-29
相关资源
最近更新 更多