【问题标题】:WPF - Configurable UIWPF - 可配置的用户界面
【发布时间】:2016-12-13 21:27:49
【问题描述】:

我们目前有一个可配置 UI 的基本实现,但我们觉得这不是最好的方法。我们正在开发另一个需要从外部文件进行配置的应用程序,我们想知道是否有更好的方法来做到这一点。

我们目前有带有名称和可用性元素的 xml 文件,这些元素直接转换为可见性。当元素为available="false" 时,我们使用visibility="collapsed" 隐藏元素。元素包含在带有名称的 Setup 元素中。我们要加载具有安装名称的单独配置文件。

<Setup name="All">
    <Element name="toolBarDrawingTools" available="true"/>
    ...
</setup>
<Setup name="Operator">
    <Element name="toolBarDrawingTools" available="false"/>
    ...
</setup>

它工作得相当好,但我们觉得这不是一个很好的方法来隐藏元素。更好的方法可能是只创建和添加我们需要的元素。布局应该不是什么大问题,因为大多数元素都是 ToolBars、MenuItems 或 UserControls,它们将被添加到 StackPanels。所以没有复杂的元素定位。我们还发现使用 XAML 代码定义 xml 文件,并在运行时将其转换为可视元素。我们不需要那么复杂。我们有一组要动态添加的 UserControl。

我们没有一个清晰的愿景,我们想要什么。最后,我们可以使用我们目前的方法,它会奏效。我们需要的是从外部源定义最终窗口中的元素,而不需要重新编译整个应用程序。

所以我要问的是我们有哪些选择,是否有任何“标准化”的方式或框架。你知道关于这个主题的任何文章或书籍吗?还是我们应该坚持最简单的方法,只隐藏我们不想要的东西?

谢谢

【问题讨论】:

  • 看看AvalonDock
  • 在我的 WPF 项目中,我使用了 Prism + Regions,每个模块都可以添加一些 UI 部分。如果你不想展示一些功能,你不应该加载模块。
  • “我们觉得仅仅隐藏元素并不是一个好方法”:如果没有具体的性能问题,请不要担心。但是“正确”的 MVVM 解决方案是将您的模块实现为视图模型,这将是主视图模型的属性(或者它们位于主 vm 拥有的集合中)。主视图以ContentControls 或ItemsControl 显示它们,每个模块都有一个隐含的DataTemplate。如果模块MainVM.Foo 被隐藏,则意味着MainVM.Foo 返回null。或者您将其从 ObservableCollection&lt;VMBase&gt; MainVM.ChildCollections 中删除。

标签: c# wpf user-interface


【解决方案1】:

据我所知,您正在开发模块化应用程序。所以我可以建议你看下一个主题; 在互联网上使用 Prism 进行模块化应用开发。例如,通过这种方法,您可以在 orderer 中使用 PRISM 发现机制(使用 app.config 文件定义模块)来构建整个用户界面。以下是几个可能的链接:

  1. Building an Extensible Application with MEF, WPF, and MVVM
  2. Modular Application Development Using Prism Library 5.0 for WPF
  3. A MEF explanation topic

如果您需要更多解释,请告诉我。

最好的问候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2016-07-22
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多