【问题标题】:What are your strategies for using Expression Blend on complex, decoupled WPF applications?您在复杂、分离的 WPF 应用程序上使用 Expression Blend 的策略是什么?
【发布时间】:2009-05-04 15:18:13
【问题描述】:

我一直在使用 Visual Studio 使用 MVVM 模式编写 WPF 应用程序,主要是手动编写 C# 和 XAML。

现在我已经掌握了 Expression Blend 的速度,因此我可以使用 GUI 快速单击 WPF 应用程序,这非常好,比摆弄所有 XAML 元素更多地控制布局 80%你的时间。

但似乎我在 Expression Blend 中的应用程序更简单,并且必然耦合,使用在后面的代码中处理的事件等。

我很难想象我会如何从这种更简单的 Expression Blend 方法转变为具有视图、ViewModel、路由事件和命令等的解耦 MVVM 应用程序,而不仅仅是将我的整个项目放入 Visual Studio 并重新排列以至于我无法在 Blend 中真正对其进行可视化编辑,但会回到使用 Blend 来创建我粘贴到 Visual Studio 中的小 XAML 片段。

对于那些使用 Expression Blend 处理更复杂的应用程序的人来说,您有哪些策略可以使您的项目以 MVVM 方式解耦,同时“以 Expression Blend 方式”结构化(其中您仍然可以以视觉上有意义的方式查看和编辑应用程序的整个部分),以便您可以在 Blend GUI 中继续编辑它们?

【问题讨论】:

    标签: wpf mvvm expression-blend


    【解决方案1】:

    我首先使用 Blend 作为快速原型制作工具。为此,我真的很喜欢它。特别是,当我不确定如何设置以获得所需的布局/行为时,我发现它非常有用。

    我很少直接在 Blend 中编辑我的主要项目文件。我发现它创建了不必要的复杂或冗长的标记。另外,随着我​​越来越熟悉 WPF/XAML,我发现自己越来越少使用 Blend。

    【讨论】:

    • 您尝试过 Blend 3 吗?我发现它的 XAML 非常易读,有时到处都有一个额外的属性,但它所做的最糟糕的事情是将某些控件的边距提高到 500+ 左右,但除此之外,我真的很喜欢在 Blend 中编辑我的视图所以我可以更改 GUI 中的属性,尤其是属性搜索功能,它在 Blend 中几乎总是更快
    • @Edward:如果它是 beta 版并且来自 Microsoft,我敢打赌我已经尝试过了 ;-) 我实际上非常喜欢 Blend。它很光滑,对于某些任务来说,它几乎是无价的。问题是……对我来说,日常 XAML 是布局,通常我发现,对于布局,少即是多。我发现我必须在 Blend 中做更多的工作,删除所有无关的属性分配,以获得我想要的行为/布局。此外,在进行纯粹的数据驱动布局时,可能很难在设计器中查看或更改布局。
    【解决方案2】:

    自版本 1 以来,我一直在项目的 UI 中使用 Blend。由于我的目标是将设计器完全集成到项目中,因此我已经克服了阻碍实现这一目标的一切。虽然已经有一段时间不了解 MVVM,但我自然得出了相同的结论,并且一直在制作 ViewModel,但并不知道它们有什么模式。现在在其他致力于 MVVM 的人的帮助下,它一直在变得更好。我现在已经开发了 3 个具有丰富 UI 和功能的应用程序,其中所有 UI 都是在 Blend 中完成的。 阅读 Josh Smith 的 MSDN 文章,查看 Jason Dolinger 的作品,以及 Karl Shifflett 的作品,仅举几例。

    仔细观察使用 ICommand、INotifyPropertyChanged、ObservableCollections。

    此外,了解如何从 ViewModel 操作控件。例如,有 ICollectionView。假设您有一个动物列表,并且您有一组要过滤它们的类型(鸟类、哺乳动物等)

    通过使用 ICommand 和 ICollectionView,您可以公开足够的控件,设计人员可以在其中构建一个列表框来显示动物,以及一个菜单来显示过滤器列表。 ICollectionView 中有足够的功能可以知道当前的选择是什么,如果你有基于 ICommand 的“SortByBird”、“SortByMammal”等命令,那么当设计师制作菜单时,它(假设窗口的上下文是你的 ViewModel这个窗口)将为设计者提供适当的绑定选项。

    我目前正在与我公司的另一个团队合作,解释我的项目是如何设置的,他们对使用 Blend 的设计师的新角色做出了积极的回应。

    【讨论】:

    • 这些听起来像是好的方向(我会查看 ICollectionView),你有这个应用程序结构的一些公开示例吗?我发现许多 MVVM 示例创建了很少的理论 WPF 示例 (tanguay.info/web/index.php?pg=notesItems&id=28) 和一些 MVVM 示例展示了如何创建 WPF 应用程序,但它们没有使 Blend 生效。有的话请发链接,谢谢。
    【解决方案3】:

    为此,我无法成功地端到端使用 Blend。

    我发现在一般情况下,在 VS 中手动编辑 xaml 会更快(例外情况包括任何使用非标准画笔的东西)。 Blend 非常适合点击,而且完成它并不是很快。

    Blend 真正有用的另一个领域是从现有控件创建样式/模板。

    除此之外,我还没有卖掉。当使用代码实例化的数据上下文时,它的功能会下降,所以它没有任何帮助,而且它往往会生成无用的标记、静态大小等,我真的不喜欢这些。

    【讨论】:

      【解决方案4】:

      Blend 非常适合让您了解如何完成工作,但它制作的 xaml 非常糟糕且紧密耦合。当您更好地了解 xaml 方面时,您会发现仅编写 xaml 比使用 Blend 快得多。在达到这一点之前,您可以在 Blend 中进行更改,但是您应该重构它创建的 xaml 以使其不那么紧密地耦合并去除无关的 UI 元素。

      【讨论】:

        【解决方案5】:

        我参加这个聚会有点晚了,但希望有人仍然可以回应。我还没有找到一个搜索结果,它概述了在设计师和程序员之间划清界限的过程。它的第一部分是 MVVM,因此 GUI 和底层“业务逻辑”之间没有任何耦合,我现在正在努力学习。我还没有看到任何人写过的另一部分是,你实际上如何在 Blend 中设计一个项目,以便开发人员基本上可以给你一个 GUI DLL,然后你的应用程序的 GUI 神奇地改变了?

        这就是我要寻找的东西——开发人员像往常一样编写他的代码,还编写了一个非常基本的 GUI 来证明一切都按预期工作。与此同时,设计师正在创建他很酷的小 GUI,它具有人们所期待的所有可用性功能。现在,开发人员可以使用他的 GUI 运行他的应用程序,但也可以即时切换到设计人员的 GUI。

        我想如果不能即时完成,这是否意味着在理想情况下,开发人员会让他的 VS 解决方案包含 Blend 解决方案中的 XAML?那么在 App.xaml 中只是引用不同的启动文件?

        【讨论】:

        • 我也没有提到可测试性的重要性,但我认为这个主题已经在几篇文章中得到了很好的介绍。
        猜你喜欢
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多