【问题标题】:How can I validate wpf bindings are going to real properties?我如何验证 wpf 绑定是否将用于真实属性?
【发布时间】:2009-04-17 13:06:53
【问题描述】:

我想要一种简单的方法来确保我在我的 xaml 文件中声明的所有绑定都转到真实属性。更好的是,我想在单元测试中实例化我的 wpf 窗口并调用一个方法来确保绑定正确。

不幸的是,如果我有什么问题,wpf 甚至不会抛出异常。这让我有责任在 QA 阶段“发现”问题。

有谁知道我可以更好地验证绑定的方法吗?

【问题讨论】:

    标签: c# .net wpf unit-testing


    【解决方案1】:

    一种次优方法是在可视化树中搜索所有依赖属性,然后检查:

    var bindingExpression = BindingOperations.GetBindingExpressionBase(dependencyObject, dependencyProperty);
    
    if (bindingExpression != null)
    {
        var status = bindingExpression.Status;
    }
    

    如果statusUnattached,则表达式尚未解析。

    当然,您不希望在生产应用程序中执行此操作,但在调试或集成测试场景中可能有意义。

    【讨论】:

      【解决方案2】:

      数据绑定错误显示在 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 对此进行了更详细的描述。

      【讨论】:

      • 我听到你在说什么,但这并不能真正验证你的绑定。它只提供开发人员必须仔细检查的调试信息。我认为尝试编写一个在“发现”绑定错误时抛出的 TraceListener 是相当脆弱的,因为它必须解析可能随 Microsoft 一时兴起而改变的消息。不过,可能总比没有好。
      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多