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

时间:2010-10-02 17:37:04

标签: .net wpf binding

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

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 个答案:

答案 0 :(得分:4)

是的,你应该。像编译器警告和错误一样处理绑定反馈(信息,错误等)是最安全的。绑定问题往往会降低应用程序的执行速度,因为它会强制重新评估绑定,根据我的经验,有时会将它们分解到需要在代码中重新创建绑定的位置。

如果可以,最简单的解决方法是将绑定上的FallbackValue设置为可以视为默认值的值。例如,如果您有一个具有“Count”属性的类,但是在创建视图的某个时间点所述类可以为null,则绑定可能看起来像<TextBlock Text={Binding Count, FallbackValue=0} />,它将显示“0”在文本块中,或者如果有一个正在使用,则将后备值传递给转换器。

答案 1 :(得分:1)

我同意Hugo的观点,如果我们能够考虑绑定给出的所有反馈,那就太好了;但我个人认为信息类型跟踪消息不是那么有害。您肯定需要解决标记为错误和警告的绑定问题。

我收到了这样的绑定信息 -

  

System.Windows.Data信息:20:由于缺少信息,BindingExpression无法检索值。   BindingExpression:路径= PlacementTarget.DataContext.RemoveCommand;   DataItem ='ContextMenu'(Name ='');目标元素是'MenuItem'   (名称= ''); target属性是'Command'(类型'ICommand')

现在,在上下文菜单中使用PlacementTarget是必要的,除非你打开上下文菜单,否则这个绑定将不起作用;

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

  

修复BindingExpression路径错误

     

如果在调试WPF应用程序时,您会在输出中看到错误   窗口像:

     

System.Windows.Data错误:40:BindingExpression路径错误:   'object'''DataSource'上找不到'AcquireFocus'属性   (的HashCode = 61327894)”。 BindingExpression:路径= AcquireFocus;   DataItem ='DataSource'(HashCode = 61327894);目标元素是   'VsButton'(姓名=''); target属性是'AcquireFocus'(类型   '布尔')*

     

然后,以及破坏的数据绑定,你可能有一个   性能问题。 WPF尝试了几种不同的方法来解析路径   错误,包括搜索附加属性,这是相当的   昂贵。消除所有这些警告,你应该是好的。视觉   Studio 2010提供了用于调试WPF数据绑定的新选项。

     

http://blogs.msdn.com/b/visualstudio/archive/2010/03/02/wpf-in-visual-studio-2010-part-2-performance-tuning.aspx