XAML数据绑定调试指南

在Visual Studio中调试XAML页面的数据绑定是开发者们非常关注的功能之一。本文将带了解如何在Visual Studio调试Silverlight 5的XAML页面,并提供一个简单的代码示例来帮助理解这一功能。阅读本文后,将能够掌握数据绑定调试的技巧,并在实际开发中应用这些知识。

环境准备

在开始之前,请确保开发环境已经正确设置。需要安装Visual Studio2010 SP1和Silverlight5 Beta,以及Visual Studio 2010的工具。接下来,创建一个新的Silverlight项目。如果对如何设置开发环境有疑问,可以参考以下文章:

  • 安装Silverlight5 Beta到开发环境。可以与现有的Silverlight版本并行安装。
  • 如果是Silverlight 5的新手,这篇文章将帮助创建第一个Silverlight 5项目。

一旦开发环境设置完成,就可以开始讨论主题了。不要忘记在文章末尾提出问题。

创建简单的UI

首先,需要创建应用程序的用户界面。保持界面简单,只需要一个TextBlock控件,并为其Text属性分配一个字符串值(如下所示):

现在可以调试XAML了,那么可以设置断点,对吗?尝试在Grid级别设置断点。

不工作!只能调试数据,而不是Grid或面板。所以,尝试在TextBlock上设置断点。

啊,那也不工作!这到底是什么功能?

别担心。Silverlight5提供了"调试XAML中的数据绑定"功能。文章标题也这么说。硬编码了TextBlock的文本值。因此,那里没有数据绑定。怎么能认为这会有效呢?哦!智能IDE。

数据绑定到控件并设置断点

让修改Text属性并在那里设置一个绑定。将绑定"Message"到Text属性。现在尝试在这里设置断点。酷,它为TextBlock控件插入了断点。

看看上面的截图。在那里将看到如何创建绑定并为绑定设置断点。这将显示错误,因为没有设置DataContext。每个绑定都需要一个DataContext来引用相应的属性。

将在Main Page XAML文件中创建一个简单的依赖属性。因此,将为UserControl添加一个x:Name。现在将ElementName设置为绑定。看看以下截图:

如果使用MVVM,需要在视图中创建ViewModel实例,然后需要将DataContext设置为ViewModel的静态资源。一旦这部分完成,绑定将正常工作。

现在需要在MainPage.xaml.cs文件中创建一个名为"Message"的依赖属性。将创建一个字符串属性。以下是代码:

public string Message { get; set; }

完成这部分后,代码实现就完成了。现在是时候看看演示的实际效果了。

调试数据绑定

让构建并运行示例应用程序。通常,如果正确遵循了上述步骤,它不应该有任何构建错误。如果有错误,请修复它们。运行应用程序后,将看到XAML断点被击中,应用程序在断点处停止。

如果打开"Locals"面板和/或"Call Stack"面板,将注意到数据和来源的完整堆栈。

只需展开Binding State,然后Final Source。将看到绑定到TextBlock的依赖属性。属性的值将显示为"null",因为没有为它设置任何值。

现在打开代码后台文件,并在页面加载或构造函数中为属性设置一个值。现在再次运行应用程序。它将再次击中断点,如果在本地面板中展开Binding State,将注意到这次已经为属性分配了值。如果遇到任何绑定错误,可以在BindingState的Error属性中找到它。

以下是将给一个更好主意的截图:

还将能够在XAML调试期间找到并设置任何UI控件的任何值。

OneWay和TwoWay调试的区别

在示例中,有一个TextBlock。TextBlock总是使用OneWay数据绑定。现在将探索TwoWay数据绑定,并将检查它们之间的区别。要使用TwoWay绑定,可以使用TextBox控件。只需将现有的TextBlock替换为TextBox。同时将Mode设置为TwoWay,如下所示:

再次运行应用程序,它将在XAML断点处中断。如下图所示,将能够看到BindingState有一个值"UpdatingTarget"。这意味着绑定设置为更新目标控件。

按F5继续。这将打开浏览器窗口,显示应用程序,UI中有一个TextBox。TextBox控件也有文本设置。更改文本并按Tab键取消焦点。

由于使用了TwoWay模式,它将触发事件以更新源与输入值,然后再次在XAML断点处停止。

这次如果检查BindingState,将注意到它有一个值称为"UpdatingSource"。这意味着,现在它正在更新源以反映由于TwoWay绑定而产生的新变化。

接下来做什么?

现在可以在XAML中进行所有可以在代码编辑器中进行的调试和断点操作。可以在XAML中设置条件断点、命中计数、过滤器、标签。此外,还可以导出调试信息(这是Visual Studio2010的一部分)到XML文件。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485