如何消除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输出窗口中获取许多绑定“信息” ,但是没有关于如何处理它的信息。
谢谢
那么你可以解决一些问题来消除一些错误。
-
Stuff
有一个私有的setter,所以你必须将BindingMode
设置为OneWay
-
A
有一个私有的setter,所以你必须将BindingMode
设置为OneWay
-
I
有一个不是int
值的后备值
但是,这些都不符合您发布的错误,只是一些观察结果
找到所有绑定问题将非常耗时,以下解决方案很简单。
只需在应用程序构造函数中输入以下代码行即可。
System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level =System.Diagnostics.SourceLevels.Critical;
通过在构造函数中添加上面的行,调试器将忽略绑定错误并提高性能。
希望这可以帮助。
谢谢,迈克。