我正在玩MVVM(利用Prism和Unity),但我有点担心如何获取给定模块的名称。在设计时我不知道给定用户可以访问哪些模块,因此显示需要是动态的。因此,如果我有3个模块,但用户只能访问模块1和模块3,我的容器结构将类似于以下内容:
########## 容器 ################================模块1文字=======
-------------查看1文本------------------
-------------查看2文本------------------
-------------查看3文本------------------
================模块3文字=======
-------------查看1文本------------------
-------------查看2文本------------------
我知道(基本上)如何获得'查看X文本'通过使用ViewModel来显示,但我不确定如何正确设置给定模块的文本。
作为参考,我的Bootstrapper.cs文件看起来像这样:
protected override DependencyObject CreateShell()
{
// Use the container to create an instance of the shell.
var view = Container.TryResolve<AppShell>();
return view;
}
protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow = (Window)Shell;
Application.Current.MainWindow.Show();
}
protected override IModuleCatalog CreateModuleCatalog()
{
var catalog = new ModuleCatalog();
catalog.AddModule(typeof(Module1));
//catalog.AddModule(typeof(Module2));
catalog.AddModule(typeof(Module3));
return catalog;
}
非常感谢您提供的任何帮助!
感谢。
答案 0 :(得分:0)
一个可能的简单解决方案是我上面评论的那个,我将在下面进行扩展:
每个模块都会定义和配置相应的视图,因此视图会知道哪些模块属于 CompileTime 。因此,为了生成和显示问题中描述的结构,可以在每个模块上创建 "ModuleXView"
查看页面, &#34; X&#34; 相应的模块号码。
此查看将包含例如顶部的TextArea
,其中显示 ModuleName ,以及 "ModuleXRegion"
< / em> 定义( ItemsControl )以便注册并显示相应的 模块的视图 < / strong>在其中列出。每个ModuleXView
都知道它属于哪个模块。因此,无需绑定 ModuleName ,TextArea
将静态配置每个 ModuleName 。
如果我不够清楚,根据 Outlook 示例,Module1
会有 "Module1View"
< / strong>,其TextArea
值将设置为&#34; Mail&#34 ;; Module2View
会将其TextArea
值设置为&#34;日历&#34;,依此类推。
最后,如果您希望将每个模块放在不同的标签中,则只需注册每个 ModuleXView
< / strong>在TabControl
区域(在父视图中定义),因此每个Tab
都会显示 ModuleXView
页面结构。
我希望这有助于你,问候。