在复杂的,分离的WPF应用程序上使用Expression Blend的策略是什么?

时间:2009-05-04 15:18:14

标签: wpf mvvm expression-blend

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

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

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

我发现很难想象如何将这种简单的Expression Blend方法转换为带有Views,ViewModel,路由事件和命令等的解耦MVVM应用程序,而不仅仅是将我的整个项目带入Visual Studio并重新排列它让我无法在Blend中直观地编辑它,但是会回到使用Blend来创建我粘贴到Visual Studio中的小块XAML。

对于那些使用Expression Blend处理更复杂应用程序的人,有什么策略可以让您的项目以MVVM方式分离,同时以“Expression Blend方式”进行结构化(其中您仍然可以通过直观的方式查看和编辑应用程序的整个部分,以便在扩展时可以在Blend GUI中继续编辑它们吗?

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

自从版本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中有足够的功能来了解当前的选择,如果你有“SortByBird”,“SortByMammal”等基于ICommand的命令,那么当设计师制作菜单时,它(假设窗口的上下文是你的ViewModel for这个窗口)将为设计者提供适当的绑定选项。

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

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

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

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