你在哪里画代码和XAMLin WPF之间的界限?

时间:2008-10-08 09:39:24

标签: wpf xaml mvvm

我越了解WPF和XAML,我越发现你可以在XAML或代码(比如C#代码或VB.Net代码)中完成所有GUI初始化和事件处理。

我的问题是那些已经在WPF工作更长时间的人,理想情况下那些已经发布了应用程序的人 - 你在哪里找到了在XAML和代码之间“画线”的最佳位置?你有没有在任何地方使用XAML?只有在与非编码UI设计师接口的地方?

这方面的任何提示对我和刚刚进入WPF编程的其他程序员都非常有帮助,并且会因我们所做的所有选择而陷入瘫痪状态!

8 个答案:

答案 0 :(得分:19)

我要看的一件事是模型 - 视图 - 视图模型模式。这是一个非常优雅的模式,自然地将所有东西分成漂亮的桶......包括你的xaml。

例如,它可以帮助您在开发人员和设计人员之间保持清晰的界限,甚至允许进行测试驱动的开发。

其中有很多信息,但我会从John Gossman的博客文章开始:

<强>更新 只想将人们指向另一个StackOverflow post,其中有很多关于M-V-VM的良好信息。

答案 1 :(得分:14)

一个提示是不在XAML中声明事件处理程序。相反,命名您的元素并在代码隐藏中附加事件处理程序。这有助于在设计人员和开发人员之间保持清晰的分离。

答案 2 :(得分:10)

正如其他人所建议的那样,请尝试遵循Model-View-ViewModel模式。但是,把东西放在代码隐藏中是可以的!规则是,如果它与“视图”相关,则将其放在Xaml或代码隐藏中(以更方便的方式)。如果与用户如何与系统交互相关的业务逻辑更多,则它属于ViewModel。如果它只是与交互无关的业务逻辑,则属于模型。

每个例子都是:

  • 模型:定义一个名为ModifiedDate的属性,用于存储上次修改的时间。

  • ViewModel :将ModifiedDate转换为名为ModifiedAge的枚举属性,具体取决于修改时间:昨天,上周,上个月,去年等

  • 查看:将ModifiedAge属性转换为背景颜色,其中最近访问的数据突出显示为亮黄色,而最近访问较少的数据更像是设计师的米色 - 卡其色灰色坚持称为“Meadow Lark Lilly Flowerpot”。

答案 3 :(得分:6)

另一个提示是将XAML分为功能和美学。开发人员通常使用功能性XAML,而设计人员主要关注美学。这使得功能XAML非常容易理解,这很重要,因为开发人员经常需要编辑这样的XAML。美学XAML通常由设计师使用工具编辑,因此它的整洁和冗长不是问题。

前一段时间我做过一篇关于此事的博客文章here

答案 4 :(得分:4)

不要忘记XAML 是代码这一事实。它是声明性的,但仍然是一种编程语言。事实上,它在转换为IL以供.NET编译器咀嚼之前,会通过转换为C#或Visual Basic。

我将回应Scott Whitlock的评论:MVVM是分离关注点和关注架构细节的好方法。把东西放在代码隐藏中真的非常好,特别是他描述的东西。如果您没有要求将设计人员与开发人员分开,那么请根据您的特定需求调整MVVM模式;不要试图迫使自己变得纯洁或理想主义。

如果您不需要使用ICommand类进行命令的灵活性,那么在后面的View代码中调用ViewModel的方法也是完全可以的。或者,如果您知道正在制作的视图将始终绑定到您正在制作的ViewModel类。或者您可以更进一步,为ViewModel定义一个接口,并仅绑定到该接口的实现。然后你仍然可以随时换掉ViewModel。

这样的东西。

答案 5 :(得分:3)

当您按照 Mode-View-ViewModel 这样的正确模式进行操作时,您将有机会在XAML方面做更多事情,而在后面的代码上做得更少。最大化WPF代码中 RoutedEvents 命令的使用。

答案 6 :(得分:2)

在构建UserControls时,我尝试尽可能地进行Xamlize。

我在现场发现的一个提示是手工创建ControlTemplateDataTemplates真是一种痛苦......我总是在XAML中写这些......

答案 7 :(得分:1)

我会说尽可能多地使用xaml,使用Bindingcommandsstylestemplates等。我必须支持使用XAMLReader保存和加载模板的功能/ XAMLWriter,对于拥有更多xaml的控件更容易。

相关问题