9

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

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

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

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

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

4

5 回答 5

7

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

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

于 2009-05-04T15:25:43.590 回答
4

从版本 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 的设计师的新角色做出了积极回应。

于 2009-05-10T17:59:54.080 回答
2

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

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

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

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

于 2009-05-04T15:56:56.090 回答
2

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

于 2009-05-04T16:01:08.933 回答
0

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

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

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

于 2010-01-05T16:10:20.867 回答