【问题标题】:Getting module name in MVVM在 MVVM 中获取模块名称
【发布时间】:2014-05-13 12:16:38
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 模块上引用的文本到底是什么?您描述的结构显示它们将如何显示在应用程序中或仅显示容器层次结构注册?我不完全理解您为什么或如何在容器注册上添加文本。但是,如果您想显示带有一些文本的模块部分,您可以创建一个配置了文本的 ModuleView 和一个您将注册相关视图的 ItemsControl 区域。问候。
  • 文本将是模块的名称。想一想 Outlook;它有 4 个默认“模块”:邮件、日历、联系人和任务。因此,如果 Module1 在我的代码上面的邮件模块中,那么我希望“邮件”会显示在我的 UI 中,依此类推。

标签: c# wpf mvvm prism


【解决方案1】:

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

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

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

如果我不够清楚,基于 Outlook 示例,Module1 将有一个 "Module1View",它的TextArea 值将设置为“邮件”; Module2View 会将其 TextArea 值设置为“日历”,依此类推。

最后,例如,如果您想将每个 模块 放在不同的标签中,您只需注册每个 ModuleXViewTabControl Region 上(在父视图中定义),因此每个Tab 都会显示ModuleXView 页面结构。

希望这对您有所帮助,问候。

【讨论】:

    猜你喜欢
    • 2013-11-06
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2012-12-09
    相关资源
    最近更新 更多