获取MVVM中的模块名称



我正在玩MVVM(利用Prism和Unity),但我有点卡住了我将如何去获得给定模块的名称。在设计时,我不知道给定用户将访问哪些模块,因此显示需要是动态的。因此,如果我有3个模块,但用户只能访问模块1和模块3,我的容器的结构将类似于以下:

##########容器################

================模块1文本=======

------------- 观点1的文本 ------------------

------------- 观点2文本 ------------------

------------- 观点3文本 ------------------

================模块3文本=======

------------- 观点1的文本 ------------------

------------- 观点2文本 ------------------

我知道(基本上)如何通过使用ViewModel来显示"视图X文本",但我不确定如何正确设置给定模块的文本。

作为参考,我的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;
    }

如果您能提供任何帮助,我将不胜感激!

谢谢。

一个可能的简单解决方案是我上面评论的那个,我将在下面展开:

每个模块将定义和配置它们对应的视图,因此视图将在CompileTime时知道它们属于哪个模块。因此,为了生成和显示问题中描述的结构,可以在每个模块上创建一个 "ModuleXView" View页面,为"X"对应的模块编号。

这个视图将包含例如TextArea在顶部显示ModuleName,和 "ModuleXRegion" 定义(ItemsControl),以便注册并显示相应的模块视图在其中列出。每个ModuleXView都知道它属于哪个模块。因此,不需要绑定ModuleNameTextArea将静态配置每个ModuleName

如果我不够清楚,基于Outlook的例子,Module1将有一个 "Module1View" ,其TextArea值将被设置为"Mail"; Module2View 将其TextArea值设置为"Calendar",依此类推。

最后,如果你想有每个模块在不同的选项卡中,例如,你只需要注册每个 ModuleXView TabControl 区域(在父视图中定义),所以每个Tab将显示 ModuleXView 页面结构。

我希望这对你有帮助,Regards

最新更新