【问题标题】:Track down UI binding error追踪 UI 绑定错误
【发布时间】:2015-04-26 20:58:33
【问题描述】:

请让我开始追踪此错误
问题是我绑定到很多 FieldValue 并且显然并非所有都失败了,否则我会收到更多这些错误 如何找到引发这些警告的 XAML 绑定?
哈希是否指向特定的绑定?

System.Windows.Data Warning: 56 : Created BindingExpression (hash=44291519) for Binding (hash=2717082)
System.Windows.Data Warning: 58 :   Path: 'FieldValue'
System.Windows.Data Warning: 56 : Created BindingExpression (hash=4012957) for Binding (hash=2717082)
System.Windows.Data Warning: 58 :   Path: 'FieldValue'
System.Windows.Data Warning: 62 : BindingExpression (hash=4012957): Attach to System.Windows.Controls.TextBox.Text (hash=30313526)
System.Windows.Data Warning: 67 : BindingExpression (hash=4012957): Resolving source 
System.Windows.Data Warning: 70 : BindingExpression (hash=4012957): Found data context element: TextBox (hash=30313526) (OK)
System.Windows.Data Warning: 78 : BindingExpression (hash=4012957): Activate with root item DocFieldDecimalSV (hash=12144638)
System.Windows.Data Warning: 107 : BindingExpression (hash=4012957):   At level 0 using cached accessor for DocFieldDecimalSV.FieldValue: RuntimePropertyInfo(FieldValue)
System.Windows.Data Warning: 104 : BindingExpression (hash=4012957): Replace item at level 0 with DocFieldDecimalSV (hash=12144638), using accessor RuntimePropertyInfo(FieldValue)
System.Windows.Data Warning: 101 : BindingExpression (hash=4012957): GetValue at level 0 from DocFieldDecimalSV (hash=12144638) using RuntimePropertyInfo(FieldValue): <null>
System.Windows.Data Warning: 80 : BindingExpression (hash=4012957): TransferValue - got raw value <null>
System.Windows.Data Warning: 82 : BindingExpression (hash=4012957): TransferValue - user's converter produced ''
System.Windows.Data Warning: 89 : BindingExpression (hash=4012957): TransferValue - using final value ''

我想我已经找到了
获取对 Get 的调用,如果结果是十进制?(空),然后是“获取原始值”的错误
然后它调用转换器
public object Convert(object value, Type targetType, object parameter,

CultureInfo culture)
{
    Debug.WriteLine("DecimalNullConverter Convert");
    Decimal? Decimal = (Decimal?)value;
    if (Decimal == null)
        return string.Empty;
    return Decimal.ToString();
}

然后是最后两行
所以我认为绑定只是在调用转换后抛出这些错误以获得 String.Emply

所以我认为他们警告我可以忽略

我真的认为会有一种直接的方法来查看是什么绑定引发了警告

【问题讨论】:

  • 您使用的是哪个版本的 Visual Studio?
  • 绑定表达式和datacontext对象会很好
  • @blindmeis 是的,绑定表达式会很好。我的问题是如何找到它?
  • 你有没有写你的xaml?创建一个有这个错误的示例项目,我们可以看看它
  • @blindmeis 什么?当我不知道错误来自哪里时,我应该如何编写一个程序来重新创建错误?我声明我经常绑定到 FieldValue,但显然并非所有都失败了。

标签: .net wpf visual-studio-2013 binding error-handling


【解决方案1】:

修改有问题的转换器,使其默认为文本“FAIL”,除非有有效数据要转换,否则将返回该文本。返回默认文本而不是 string.empty,然后直观地找到问题。

如果绑定发生在视觉上无法看到默认文本的位置,请在转换内部设置断点并通过以下任一方式确定控件以控件的名义?或 2) 使用/设置 ConverterParameter 并将 id 传递给转换以识别特定控件。

或者在绑定上设置FallbackValue,看看是否可以缩小可能的文本框列表。

【讨论】:

  • 如何找到有问题的转换器?我不知道这些错误来自哪里。
  • @Blam 你到底有多少个转换器?我建议您采取分而治之的策略。从进程中删除页面,直到找到警告来自的页面。然后注释掉页面上的一半控件。继续这样做,直到找到有问题的控件。否则,将所有转换器更改为返回“失败”,如上所述。
  • 我有 40 多页,我真的不能一次拿出一个。我将从转换器的失败开始。
  • @Blam 从消息中显示它与decimal 转换有关?这可能是一个线索。
猜你喜欢
  • 2011-11-05
  • 2011-05-10
  • 1970-01-01
  • 2015-02-02
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多