3

这与 WPF 或 Prism 的复合应用程序指南有关。

我的外壳中有一个“MainRegion”。我的各种模块将被加载到这个主要区域。我可以在菜单中填充可用模块的列表并选择它们进行加载。单击菜单,我会执行以下操作:

var module = moduleEnumerator.GetModule(moduleName);
moduleLoader.Initialize(new[] { module });

第一次一切正常,因为执行了模块的Initialize()方法,但是在Module1,Module2和Module3初始化之后,再次点击加载Module2时没有任何反应。

我的问题:在执行了初始化方法后,如何按需激活模块?

感谢您的帮助!

4

4 回答 4

4

您实际上并没有激活该模块。您激活区域中的视图。阅读这篇文章

Initialize 方法只对任何模块调用一次。当您调用 LoadModule 时,您看到模块中的视图被激活,我猜这是因为 Initilalize 方法正在向区域注册视图。这将激活视图。如果您有多个视图,则最后注册的将是活动视图。

要激活视图,您需要调用区域的激活方法(假设注入了 IUnityContainer 和 IRegionManager)...

// Get a view from the container.
var view = Container.Resolve<MyView>();

// Get the region.
var region = RegionManager.Regions["MyRegion"];

// Activate the view.
region.Activate(view);

根据区域控件的类型,这将替换那里的视图或添加到其中。

于 2009-05-22T10:22:13.213 回答
2

您可以通过调用 Regions 的 Remove 方法来删​​除视图。

public void RemoveViewFromRegion(string viewName, string regionName, object defaultView)
    {
      IRegion region = regionManager.Regions[regionName];
      object view = region.GetView(viewName);
      region.Remove(view);
      region.Activate(defaultView); 
    }
于 2010-08-10T21:46:53.537 回答
0

您应该有一个 ContentControl 将成为您的区域。然后,您需要将所有模块添加到该区域。当您单击菜单时,您应该使用该区域的 Activate(...) 方法来激活特定模块。

于 2008-12-14T21:50:19.433 回答
0

这是否意味着当你激活模块时,可能被它重叠的其他模块设置为Visibility.Collapsed?

于 2010-02-05T23:20:47.837 回答