在MVVM中获取模块名称

时间:2014-05-13 12:16:39

标签: c# wpf mvvm prism

我正在玩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;
    }

非常感谢您提供的任何帮助!

感谢。

1 个答案:

答案 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 页面结构。

我希望这有助于你,问候。