这个问题也发布在Prism的Codeplex网站上.
我在按需加载模块时有点迷失,我希望你们能够启发我.我正在使用v2#7.
1)我有2个区域 - 一个用于实例化模块的按钮(MenuRegion),另一个用于显示模块(MainRegion).在MenuRegion中一次只能看到一个模块.
2)模块可以在目录中找到
3)MenuModule模块与MenuRegion相关联,用于创建显示模块名称的按钮.单击其中一个按钮时,将加载相应的模块并显示在MainRegion中.
4)行为:
a)单击ModuleA按钮并显示ModuleA.用户在ModuleA中输入数据,数据保持未保存状态.
b)单击ModuleB按钮并显示ModuleB.用户在ModuleB中输入数据,数据保持未保存状态.
c)单击ModuleA按钮,显示ModuleA,其中包含先前输入的信息.
1)MainRegion应该是ContentControl,因此一次只能看到一个模块.
2)我想我需要枚举我的目录的"GrouplessModules"来获取目录中可用模块的ModuleInfo
3)加载模块我认为我需要调用myModuleManager.LoadModule(moduleName)
1)我应该在我的MenuModuleView的构造函数中将moduleManager作为参数吗?
2)如何从MenuModuleView内部访问目录,以便枚举可用的模块?
3)从MenuModuleView,我通过模块枚举,我创建按钮,将ModuleInfo分配给按钮的Tag属性.这样,我只有一个点击事件来加载模块.它是否正确?它闻起来有点像我的工作...
非常感谢你的帮助!!!
1)我应该在我的MenuModuleView的构造函数中将moduleManager作为参数吗?
从技术上讲,你可以.实际上,如果你这样做,你仍然想要为你的视图定义一个默认构造函数.否则,您的视图将无法在设计人员中使用.因此,我建议使用属性将依赖项传递给UI组件.
2)如何从MenuModuleView内部访问目录,以便枚举可用的模块?
您将依赖于Prism的IModuleEnumerator
接口,依赖注入将负责为您的视图提供模块枚举器.假设您在Unity容器中使用Prism,那将看起来像这样:
[Dependency] public IModuleEnumerator ModuleEnumerator { get; set; }
3)从MenuModuleView,我通过模块枚举,我创建按钮,将ModuleInfo分配给按钮的Tag属性.这样,我只有一个点击事件来加载模块.它是否正确?它闻起来有点像我的工作...
我建议你让每个按钮引发相同的WPF命令,而不是分配ModuleInfo
给它Button
的CommandParameter
属性.同样,Prism的基础设施可以帮助您在复合场景中干净利落地完成此任务.看DelegateCommand
课.
作为最后一点,请注意,虽然您可能会懒得加载模块,但您将无法卸载它们.为此,你需要AppDomain
隔离,这是另一个鱼的水壶.