我(很)最近开始研究棱镜(WPF应用程序),我一直在为我的团队开发一个小型演示应用程序。我的问题是一个相当普遍的问题,但我找不到一个简单的例子来指导我:
假设我有壳牌(在主模块中),并且壳牌有一个区域应该由不同的内容填充模块(BTW,这是个好主意吗?)。
这是怎么发生的?谁负责将其他模块的视图添加到Shell的指定区域?其他模块的相关视图模型何时被初始化?代码示例/链接到他们将不胜感激。棱镜,MVVM和模块化
谢谢!
编辑:问题分割,请参阅the new question。
我(很)最近开始研究棱镜(WPF应用程序),我一直在为我的团队开发一个小型演示应用程序。我的问题是一个相当普遍的问题,但我找不到一个简单的例子来指导我:
假设我有壳牌(在主模块中),并且壳牌有一个区域应该由不同的内容填充模块(BTW,这是个好主意吗?)。
这是怎么发生的?谁负责将其他模块的视图添加到Shell的指定区域?其他模块的相关视图模型何时被初始化?代码示例/链接到他们将不胜感激。棱镜,MVVM和模块化
谢谢!
编辑:问题分割,请参阅the new question。
是的,分离壳和视图是一个好主意。
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";
//...
}
}
[/编辑]
在你的引导程序,你会定义一个模块目录(覆盖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
请分割你的问题。增加的部分应该进入他们自己的问题。否则,它在这里变得很难看。 – PVitt
你说得对,做完了。 – Noich