如何消除WPF输出窗口中的绑定“信息” – 无法使用绑定检索值

我正在编写一个WPF应用程序,性能有点慢,所以我试图解决它。 当我跑步时,我会收到大量这些类型的消息:

System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=(0); DataItem=null; target element is 'Control' (Name=''); target property is 'Visibility' (type 'Visibility') System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation') System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility') System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=ValidationErrorTemplate; DataItem=null; target element is 'Control' (Name=''); target property is 'Template' (type 'ControlTemplate') 

如果我做一个小例子应用程序:

              

以下对象定义:

 public class Thinger { public ObservableCollection Stuff { get; private set; } public Thinger() { //Fill up some bogus data string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i = 0; Stuff = new ObservableCollection(); foreach (var letter in letters) { Stuff.Add(new ARow(letter.ToString(),i)); i++; } } } public class ARow { public string A { get; private set; } public int I { get; set; } public ARow(string a, int i) { A = a; I = i; } } 

一旦执行,我就会遇到那些有约束力的问题。 因为许多WPF性能文章声称失败的绑定会严重损害性能,我怀疑这可能是我的许多问题的根源。

到底是怎么回事? 如何消除这些失败的绑定? 我提供的示例就像我可以做到的那样简单,同时仍然是问题的症状,但它应该工作,不应该吗? 我正在为.net 4.0构建,如果这有任何区别的话。

编辑:如果您尝试构建示例代码,可能会抑制错误。 在visual studio选项 – >调试 – >输出窗口 – >数据绑定中,看到它是在“信息”上设置的。

我已经看到在WPF输出窗口中获取许多绑定“信息” ,但是没有关于如何处理它的信息。

谢谢

那么你可以解决一些问题来消除一些错误。

  1. Stuff有一个私有的setter,所以你必须将BindingMode设置为OneWay
  2. A有一个私有的setter,所以你必须将BindingMode设置为OneWay
  3. I有一个不是int值的后备值

但是,这些都不符合您发布的错误,只是一些观察结果

找到所有绑定问题将非常耗时,以下解决方案很简单。

只需在应用程序构造函数中输入以下代码行即可。

 System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level =System.Diagnostics.SourceLevels.Critical; 

通过在构造函数中添加上面的行,调试器将忽略绑定错误并提高性能。

希望这可以帮助。

谢谢,迈克。