【发布时间】:2009-04-17 13:06:53
【问题描述】:
我想要一种简单的方法来确保我在我的 xaml 文件中声明的所有绑定都转到真实属性。更好的是,我想在单元测试中实例化我的 wpf 窗口并调用一个方法来确保绑定正确。
不幸的是,如果我有什么问题,wpf 甚至不会抛出异常。这让我有责任在 QA 阶段“发现”问题。
有谁知道我可以更好地验证绑定的方法吗?
【问题讨论】:
标签: c# .net wpf unit-testing
我想要一种简单的方法来确保我在我的 xaml 文件中声明的所有绑定都转到真实属性。更好的是,我想在单元测试中实例化我的 wpf 窗口并调用一个方法来确保绑定正确。
不幸的是,如果我有什么问题,wpf 甚至不会抛出异常。这让我有责任在 QA 阶段“发现”问题。
有谁知道我可以更好地验证绑定的方法吗?
【问题讨论】:
标签: c# .net wpf unit-testing
一种次优方法是在可视化树中搜索所有依赖属性,然后检查:
var bindingExpression = BindingOperations.GetBindingExpressionBase(dependencyObject, dependencyProperty);
if (bindingExpression != null)
{
var status = bindingExpression.Status;
}
如果status 是Unattached,则表达式尚未解析。
当然,您不希望在生产应用程序中执行此操作,但在调试或集成测试场景中可能有意义。
【讨论】:
数据绑定错误显示在 Visual Studio 输出窗口中。例如,假设我想将 TextBlock 绑定到 Window 的 Title 属性,但我将“Title”错误地输入为“Ritle”。我会在输出窗口看到这个:
System.Windows.Data 错误:39:BindingExpression 路径错误:在“对象”“MessageWindow”(名称=“Window”)上找不到“Ritle”属性。 BindingExpression:路径=Ritle; DataItem='MessageWindow' (Name='Window');目标元素是'TextBlock'(名称='WindowTitle');目标属性是“文本”(类型“字符串”)
您可以通过使用跟踪源更好地控制这些消息的报告方式。 Bea Stollnitz 的This article 对此进行了更详细的描述。
【讨论】: