2011-11-23 152 views
1

我(很)最近开始研究棱镜(WPF应用程序),我一直在为我的团队开发一个小型演示应用程序。我的问题是一个相当普遍的问题,但我找不到一个简单的例子来指导我:
假设我有壳牌(在主模块中),并且壳牌有一个区域应该由不同的内容填充模块(BTW,这是个好主意吗?)。
这是怎么发生的?谁负责将其他模块的视图添加到Shell的指定区域?其他模块的相关视图模型何时被初始化?代码示例/链接到他们将不胜感激。棱镜,MVVM和模块化

谢谢!

编辑:问题分割,请参阅the new question

+0

请分割你的问题。增加的部分应该进入他们自己的问题。否则,它在这里变得很难看。 – PVitt

+0

你说得对,做完了。 – Noich

回答

1

是的,分离壳和视图是一个好主意。

RegionManager负责将视图添加到区域中。因此,您将Region注册到RegionManager,并将视图注册到RegionManager。

你最终将与类似壳内:

<Window xmlns:Regions="clr-namespace:Microsoft.Practices.Prism.Regions;assembly=Microsoft.Practices.Prism" 
     xmlns:Inf="clr-namespace:YourNamespace.Infrastructure;assembly=YourNamespaceInfrastructure"> 
    <Grid> 
     <ContentControl 
      Regions:RegionManager.RegionName="{x:Static Inf:RegionNames.MainRegion}"/> 
    </Grid> 
</Window> 

现在,你必须注册,以便该地区将居住在:

public class FirstModule : IModule 
{ 
    public void Initialize() 
    { 
     RegionManager.RegisterViewWithRegion(RegionNames.MainRegion, 
      typeof(MainView)); 
     RegionManager.RegisterViewWithRegion(RegionNames.SecondRegion, 
      () => Container.Resolve<ISomethingViewModel>().View); 
    } 
} 

的示例代码显示这两种类型的注册。第一种是查看第一种方法,后者是查看模型的第一种方法。

[编辑]

的区域名称在静态类中定义的基础设施模块:

namespace YourNamespace.Infrastructure 
{ 
    public static class RegionNames 
    { 
     public const string MainRegion = "MainRegion"; 
     //... 
    } 
} 

[/编辑]

+0

谢谢!你的意思是在基础设施项目中定义地区的名字吗?它比我的模块神奇地知道它的地区名称更有意义,但我不确定你是如何做到的。 – Noich

+0

@Noich是的,区域名称驻留在我的基础设施装配中的静态类中。看看更新的答案。 – PVitt

+0

再次感谢。请参阅原始帖子的2个编辑,以获得更多问题和澄清。我会很感激你的帮助。 – Noich

2

在你的引导程序,你会定义一个模块目录(覆盖CreateModuleCatalog),其中列出了将在您的应用程序中使用的模块。每个模块都有一个实现IModule的类,其中包含在创建模块时调用的Initialize方法。在此,你会定义什么是被添加到该区域的外壳:

public void Initialize() 
    { 
     RegisterViewsAndServices(); //Method to register dependencies 
     IMyViewModel model = _container.Resolve<IMyViewModel>(); 
     _regionManager.Regions[RegionNames.ShellHeaderRegion].Add(model); 
    } 

在这里,我添加了一个视图模型的外壳和我之外的定义的资源字典确定哪些观点应该适用于它通过DataTemplate。

Prism文档(特别是第2章)有很多有用的信息。 http://msdn.microsoft.com/en-us/library/gg406140.aspx