在WPF输出窗口中获取许多绑定“信息”

4

当我启动应用程序时,会得到很多这样的信息:

System.Windows.Data Information: 10 : Cannot retrieve value using the binding and 
no valid fallback value exists; using default instead. 
BindingExpression:Path=Period; DataItem=null; target element is 'TextBlock' (Name=''); 
target property is 'Text' (type 'String')

System.Windows.Data Information: 10 : Cannot retrieve value using the binding and 
no valid fallback value exists; using default instead. 
BindingExpression:Path=DocumentId; DataItem=null; target element is 'TextBlock' (Name=''); 
target property is 'Text' (type 'String')

我需要关注那个输出吗?
2个回答

4
是的,你应该这么做。最安全的方法是将绑定反馈(信息、错误等)视为编译器警告和错误来处理。绑定问题会减慢应用程序的执行速度,因为它强制重新评估绑定,并且根据我的经验,有时会破坏它们,从而需要在代码中重新创建绑定。
如果可以的话,最简单的解决方法是将绑定的设置为可视为默认值的值。例如,如果你有一个类,它有一个"Count"属性,但是当你的视图创建时,该类可能为空,那么你的绑定可能如下所示:,这将在文本块中显示"0",或者如果使用了转换器,则将回退值传递给转换器。

1
这对我来说似乎很愚蠢,几乎像在数据库设计中确定引用完整性。我的绑定总是获取数据,否则它们就不显示任何内容,那么问题出在哪里?我没有为CurrentCustomer.Name设置默认值,为什么应该有一个默认值?“Jon Doe”没有意义……那么为什么我的绑定要回退?要么有数据,要么没有……然后它什么也不显示。我有大约50个属性显示这些信息的“错误”。现在我必须发挥想象力,考虑一些疯狂的东西来命名它?哈哈,然后这个=> BindingExpression:Path=ValidationErrorTemplate; fallback ??? - Elisabeth
2
没有什么可以阻止空值成为回退值。在您的示例中,将空字符串作为回退值是有意义的,而不是使用虚构的值。 - Hugo
好的,Hugo,但我从哪里知道要使用什么作为回退值?不知道可能会让我的绑定比现在更糟糕... - Elisabeth
我甚至可以绑定一些我从未听说过并且在整个Visual Studio解决方案中根本不使用的属性,这会拖慢所有关于它们的信息...:BindingExpression:Path=CellsPanelHorizontalOffset; BindingExpression:Path=HeadersVisibility; - Elisabeth
作为对原回答的跟进,我最终找到了(在寻找其他性能问题时,而不是一直纠缠于这个问题!哈哈)我最初获取信息的参考来源,即Visual Studio团队博客,特别是有关性能调整的文章。http://blogs.msdn.com/b/visualstudio/archive/2010/03/02/wpf-in-visual-studio-2010-part-2-performance-tuning.aspx - Hugo

1

我同意Hugo的观点,如果我们可以考虑绑定给出的所有反馈意见,那是很好的;但就个人而言,我不认为信息类型的跟踪消息会对程序造成太大的危害。你肯定需要解决标记为错误和警告的绑定问题。

我得到了像这样的绑定信息 -

System.Windows.Data Information: 20 : BindingExpression cannot retrieve value due to missing information. BindingExpression:Path=PlacementTarget.DataContext.RemoveCommand; DataItem='ContextMenu' (Name=''); target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')

现在,在上下文菜单中必须使用PlacementTarget,除非您打开上下文菜单,否则此绑定将不起作用;

我试图找到一些可靠的源,提到这些信息消息的确切影响,但没有找到任何内容。 Hugo提供的链接也提到了错误类型的输出 -

修复BindingExpression路径错误
如果在调试WPF应用程序时,您在输出窗口中看到如下错误: System.Windows.Data Error: 40 : BindingExpression path error: 'AcquireFocus' property not found on 'object' ''DataSource' (HashCode=61327894)'. BindingExpression:Path=AcquireFocus; DataItem='DataSource' (HashCode=61327894); target element is 'VsButton' (Name=''); target property is 'AcquireFocus' (type 'Boolean')* 那么,除了数据绑定出现问题外,您可能还会遇到性能问题。WPF尝试多种不同的方法来解决路径错误,包括搜索附加属性,这是相当昂贵的。消除所有这样的警告,您就可以放心使用了。Visual Studio 2010具有新的选项来调试WPF数据绑定。 http://blogs.msdn.com/b/visualstudio/archive/2010/03/02/wpf-in-visual-studio-2010-part-2-performance-tuning.aspx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接