【问题标题】:Why to Jump to WPF for Business Application instead of using Winforms为什么要跳到 WPF for Business Application 而不是使用 Winforms
【发布时间】:2012-03-09 01:52:41
【问题描述】:

我们的团队在 Winforms 和 ASP.net 项目方面经验丰富。

正如程序员堆栈交换中的其他程序员建议我为我们团队的下一个项目跳到 WPF 而不是将 WinForms 用于我们基于客户端的业务应用程序。

现在我开始使用 WPF 开发我的第一个项目,这对我来说有点棘手,因为这是我第一次尝试使用它。

您能否提供更深入的信息,为什么我们需要跳转到 WPF 而不是使用 winforms?

我需要说服我们的经理,我们可以为基于客户的项目挖掘 WPF。

我们正在使用 VS 2008。

【问题讨论】:

  • SO 是针对特定编程问题的。
  • 我已经给出了答案,但要考虑的一个旁注是客户端计算机是否可以处理 WPF。有一些限制,如果客户端机器不够强大(例如,繁重的动画),你应该避免在 WPF 中做一些事情。
  • 谢谢@-m-y 也许我们会用更少的动画创建客户端 wpf 应用程序。

标签: c# wpf winforms visual-studio-2008


【解决方案1】:
  1. 选择一个好的 MVVM 框架。我个人使用Microsoft Prism。如需其他替代方案,请查看this StackOverflow question

  2. 路由事件仅用于视图。例如,如果您想在文本更改时滚动到多行文本框的末尾。

  3. 命令用于绑定逻辑驻留在视图模型(业务逻辑)上的事件...例如,提交按钮。

  4. 如果您的团队中有设计师,请让他们开始使用 Expression Blend 并了解样式/布局。 Expression Blend 允许您使用示例数据来查看您的应用程序布局,而无需一直运行它。

  5. 了解The difference between ContentControl and ContentPresenter

  6. 了解ItemsControls 的工作原理。有a difference between SelectedItem, SelectedValue, and SelectedValuePath

  7. 在网上看很多例子。 Dr. WpfWPFTutorial.netJosh Smith on WPF

  8. 如果您计划利用代码 UI 测试(测试实际用户界面),请确保命名重要的控件(大多数 MVVM 教程告诉您不必命名任何控件) .如果您不打算进行 Coded UI 测试,请不要为控件命名,除非您需要从视图本身引用它们。

  9. IValueConverterIMultiValueConverter 只能用于将属性转换为与视图相关的项目。最常用的转换器是BooleanToVisiblity 转换器。

  10. TargetNullValueFallbackValueStringFormat 在使用绑定时很重要。不要假设被绑定的数据总是可用且正确的。

  11. 您几乎总是会从视图模型中公开ObservableCollection<T>ReadOnlyObservableCollection<T>。您很少会返回任何其他类型的集合,包括IEnumerable<T>

  12. 在选择 BindingMode 时要小心:OneWayOneTimeTwoWayOneWayToSource(警告:OneWayToSource 很棘手......它仍然需要一个 getter,因为它是 不是只写绑定)。

  13. 一个很好的免费调试工具是Snoop。它类似于运行 WPF 应用程序的 DOM 浏览器。 Mole 是一个更高级(不是免费)的工具,功能更强大。

目前我能想到的就这些了...哦,如果您遇到障碍,StackOverflow 就是您的朋友 :)

【讨论】:

  • 我个人建议在没有框架的情况下开始您的发现。虽然我喜欢所有主要框架,但在您了解它们要解决的问题之前,很难知道哪个是您的方案中最好的。
  • @ReedCopsey:或者,更好的是......使用框架并查看代码以了解它在做什么。我就是这样做的:)
  • 问题(据我所见)是,通常很容易认为特定框架采用的方法是“正确的”方法。例如,如果您使用 MVVM Light 和 Caliburn Micro(这两个很棒的框架)以这种方式处理它,您将对事情应该如何工作有一个完全不同的想法——两者都不一定是“正确的”,因为这两种方法都有非常强的优势,但也有很大的缺点。如果您从 Prism 之类的东西开始,您将尝试理解很多(虽然非常有用)不一定与 WPF 直接相关的东西。
  • @ReedCopsey:是的,我同意。 Prism 的学习曲线非常陡峭。我花了大约一天的时间来了解 MVVM,大约花了一年的时间来了解 Prism 的深层角落。但是,我发布到各种框架的链接很好地讨论了它们的差异。
  • @-m-y,@Reed Copsey 。嗨,现在我们将使用 winforms 并稍后使用 WPF...也许我们的开发经理是正确的..他说我们现在需要赶上我们的积压项目并使用 winforms 来赶上我们的积压项目。他告诉我会在业余时间学习 WPF,并在接下来的项目中使用它之前熟悉它。
【解决方案2】:

我写了一封 series on WPF with MVVM 专门针对具有 Windows 窗体背景并计划跳槽的开发人员。

它介绍了 WPF 的一些基础知识,展示了它如何让您以不同于 Windows 窗体的方式进行开发,包括(温和地)引入模板、命令和其他与 WPF 中非常出色的数据绑定相关的概念。

这将很好地介绍 WPF,并向您展示为什么它比 Windows 窗体更适合业务应用程序。

【讨论】:

  • 谢谢先生..你有你的文章的pdf格式吗..谢谢
  • @BizApps 不,但它们都在线 - 欢迎您将它们打印成 PDF...
【解决方案3】:

对于那些正在阅读并想知道“为什么使用 WPF”而不是 Winforms 的人,答案是 WPF 数据绑定让它变得容易多了。 MVVM 确实只是为了帮助您充分利用它,但您并不严格需要它。

作为一个刚刚学习的人,我建议只是尝试一下 WPF,打开一个项目并开始做你在 WinForms 中所做的事情,手动分配属性和处理事件。它会起作用的。但是,一旦你发现 WPF 会自动为你做这件事,你就会突然开始厌恶旧的方式,而你最终会走上 MVVM 的快乐之路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2013-01-04
    • 2013-12-07
    • 2015-05-03
    相关资源
    最近更新 更多