【问题标题】:What are the most common mistakes made in WPF development? [closed]WPF 开发中最常见的错误是什么? [关闭]
【发布时间】:2008-11-27 00:27:29
【问题描述】:

此问题旨在提供开发 WPF 应用程序时常见陷阱、“陷阱”或设计问题的解决方案列表。这也可以包括适当的设计模式,只要有解释为什么它工作得最好。应根据问题类型的常见程度对响应投赞成票或反对票。以下是规则:

  • 每个帖子一个回复。这显然会使最常见的问题排名最高。
  • 最好提供已存在于 SO 土地某处的相关帖子或解决方案的链接。

【问题讨论】:

  • 随着越来越多的商店开始关注 WPF,这对于许多开发人员来说可能是非常宝贵的资源。

标签: wpf


【解决方案1】:

问题:到目前为止,我看到的主要问题是人们开始在 WPF 中编码时考虑到了 winform UI 模型。

解决方案WPF 不是 WinForms/MFC/Win32 所以忘记你在过去 20 多年开发基于 Windows 的 UI 时使用和学习的所有 UI 方面的假设和规范年。

了解这个平台背后的核心思想非常重要,这个链接-Major UI Development Breakthroughs in the new WPF platform将深入了解WPF。其中列出了以下几点。突出显示的是我最喜欢这个平台的功能。

  1. 高级图形
  2. 绘制对象模型
  3. 丰富的应用程序文本
  4. 可调整的 UI 布局
  5. 灵活的内容模型
  6. 外观控件
  7. 数据驱动的用户界面
  8. 风格一致
  9. 触发器
  10. 声明式编程

【讨论】:

  • 你真的应该更具体。在您对您的意思提供更详细的解释之前,我不会投票。你应该提供一些 M-V-VM 的参考资料。
  • 他是绝对正确的,这是您必须克服的一件事才能理解 WPF
  • 第二个弥迦,我应该放弃哪些假设?
【解决方案2】:

在项目开始时没有意识到字体渲染有多糟糕,并且被客户告知他们无法忍受看着它,因为一切看起来都很模糊。

【讨论】:

  • 不知道为什么人们不赞成这个。这一直是很多人的主要问题。似乎只有在微软尝试将 WPF 用于 VS 2010 之后,他们才意识到这是一个多么重要的问题。
【解决方案3】:

问题:使用 M-V-VM 设计模式,我在哪里实例化视图?这会发生在 ViewModel 中吗? SO Question 1, SO Question 2

解决方案: WPF 开发在使用 M-V-VM 模式时最有效,而不是其他常见模式,例如 M-V-C。趋势是将 ViewModel 与处理打开和创建视图以及模型的控制器相同。在 M-V-VM 中情况并非如此。视图是唯一应该创建视图的地方。 ViewModel 应该对视图一无所知。 SO Answer 1, SO Answer 2

【讨论】:

  • 这产生了一个后续问题:您如何创建视图?我使用 RelayCommands 将视图中的动作绑定到 ViewModel,因此视图甚至不知道动作已经触发,也不知道他应该打开一个新视图。解决方案:在VM中创建一个事件供View订阅?
  • @Sam - 我要写一篇关于这个的文章。你能给我一些例子,命令应该存在于 VM 中而不是视图本身吗?
【解决方案4】:

问题/疑问: SO Question

如何公开 DependencyProperty 我的用户中的一个组件 控制权交给用户?有很多 如何暴露一个正常的例子 通过创建新的依赖项来获取属性 属性和绑定,但没有关于如何 公开一个只读属性,如 FrameworkElement.ActualWidthProperty。

解决方案:您需要在用户控件中公开一个新的 Readonly DependencyProperty,并在您包含的“组件”的 ActualWidthProperty 更新时更新它。这需要使用 DependecyPropertyDescriptor 来获得发生更改的通知。 SO Solution

【讨论】:

    【解决方案5】:

    让数据绑定在 ContentControls(Windows、UserControls 等)中定义的属性和构成控件内容的元素的属性之间正常工作。例如。假设我有一个如下所示的窗口:

    <Window x:Name="MyWindow"....>
       <TextBlock Text="{Binding Path=PropertyDefinedInMyWindow}" />
    </Window>
    

    问题:无论您多久更新一次“PropertyDefinedInMyWindow”,它都不会反映在 TextBlock 中。 SO Question

    解决方案:你需要设置Window的DataContext或者告诉绑定属性所在的元素。 SO Solution

    【讨论】:

      【解决方案6】:

      伊万·陶尔森就这个话题做了一个非常好的演讲。大部分信息都在他的幻灯片中,您可以从这里获得: http://hestia.typepad.com/flatlander/2008/08/codecamp-2008-.html

      【讨论】:

        【解决方案7】:

        在视图中使用代码 - 让婴儿 FSM 哭泣。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-20
          • 1970-01-01
          • 1970-01-01
          • 2010-10-02
          • 1970-01-01
          • 2010-10-13
          • 1970-01-01
          相关资源
          最近更新 更多