解决 WPF/Silverlight 中的数据绑定问题

  • Jonathan Allen
  • 张龙

2010 年 7 月 5 日

话题:.NET语言 & 开发

WPF 中的数据绑定让人眼前一亮,自从 Visual Basic 3 以来,微软一直致力于将灵活性、健壮性与易用性有机地整合起来。虽然 WPF 并不完美,但它要比其前辈更加近接于这个目标。然而遗憾的是,其失败模型是把双刃剑,它并不会抛出应用崩溃异常,而是将绑定错误直接写到追踪监听器当中。这样,要想找到错误的根源比登天还难。

关于 WPF 中数据绑定的最主要的文档是Data Binding Overview。虽说该文档是 WPF 或 Silverlight 开发者的必备读物,但几乎没有谈到调试和问题的解决方法,关于调试只用了一句话的概括。

调试机制

可以为绑定对象设置附加属性 PresentationTraceSources.TraceLevel 以获取关于特定绑定的状态信息。

Karl Shifflett就数据绑定给出了一些建议,但几乎都是泛泛而谈,比如检查 DataContext 是否包含了正确的对象等。由于 Silverlight 经常要在 IDE 外运行,他的这些建议也根本排不上用场。

幸好,一些第三方工具可以在一定程度上帮助我们解决这些问题。Cory Plotts 的 Snoop 可以附加到任何.NET 3.5 或 4.0 WPF 应用上。一旦加载完毕,它可以给出关于控件树、属性值来自于何处以及数据绑定错误等的相关信息。Snoop 2.6位于 CodePlex 上,基于 Microsoft Public License。

另一个工具是 Karl Shifflett 的 Glimpse,它无法附加到 Silverlight 应用上而必须要编译到应用中才行。启动后,它会通过一个浮动窗口通知用户未处理的应用与数据绑定异常。可以从 Karl 的博客上下载Glimpse for Silverlight

另一个常用的技术是增加一个假值转换器,然后在其中设定断点。Marlon Grech 曾写过一篇文章谈到了如何编写调试转换器。在代码中硬编码断点声明后就不需要手工设置断点了。

查看英文原文:Fixing Data Binding Problems in WPF/Silverlight

.NET语言 & 开发