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

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

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

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

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

有帮助吗?

解决方案

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

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

其他提示

自从版本1以来,我一直在使用Blend作为我的项目的UI。由于我的目标是将设计师完全集成到项目中,所以我已经完成了对这个目标的任何改进。虽然一段时间没有意识到MVVM,但我自然也得出了相同的结论,并且在不知道它们存在模式的情况下制作了ViewModels。现在,在其他致力于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的新角色。

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

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

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

除此之外,我还没有卖掉。当使用代码实例化的datacontexts时,它的功能会下降,所以它没有帮助,它往往会产生无用的标记,静态大小等等,我真的不喜欢它。

Blend很适合让你了解事情是如何完成的,但它所造成的xaml是可怕的并且紧密耦合。当你更好地学习xaml方面时,你会发现编写xaml要比使用Blend快得多。在你达到这一点之前,你可以在Blend中进行更改,但是你应该重构它创建的xaml,使它不那么紧密耦合,并取出无关的UI元素。

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

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

我想如果它无法在飞行中完成,这是否意味着理想情况下开发人员将他的VS解决方案包含来自Blend解决方案的XAML?然后在App.xaml中引用一个不同的启动文件?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top