Debug ElementName绑定

Kri*_*son 2 data-binding wpf

有没有办法进一步调试绑定,而不是使用PresentationTraceSources.TraceLevel?

我有一个相当复杂的问题,当在一个Button上的CommandParameter上使用它时,ElementName绑定失败(找不到该元素),该Button是UserControl2上放置在UserControl1内的子节点.PresentationTraceSources.TraceLevel = High的输出是(PåstandsListe是UserControl2):

System.Windows.Data Warning: 52 : Created BindingExpression (hash=8957325) for Binding (hash=61342683)
System.Windows.Data Warning: 54 :   Path: 'SelectedItem'
System.Windows.Data Warning: 56 : BindingExpression (hash=8957325): Default mode resolved to OneWay
System.Windows.Data Warning: 57 : BindingExpression (hash=8957325): Default update trigger resolved to PropertyChanged
System.Windows.Data Warning: 58 : BindingExpression (hash=8957325): Attach to System.Windows.Controls.Button.CommandParameter (hash=426476)
System.Windows.Data Warning: 63 : BindingExpression (hash=8957325): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=8957325): Found data context element: <null> (OK)
System.Windows.Data Warning: 70 :     Lookup name PåstandsListe:  queried Button (hash=426476)
System.Windows.Data Warning: 61 : BindingExpression (hash=8957325): Resolve source deferred
'Domstolene.JFS.GUI.vshost.exe' (Managed (v2.0.50727)): Loaded 'C:\Windows\assembly\GAC_64\System.Transactions\2.0.0.0__b77a5c561934e089\System.Transactions.dll', Symbols loaded.
System.Windows.Data Warning: 63 : BindingExpression (hash=8957325): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=8957325): Found data context element: <null> (OK)
System.Windows.Data Warning: 70 :     Lookup name PåstandsListe:  queried Button (hash=426476)
System.Windows.Data Warning: 63 : BindingExpression (hash=8957325): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=8957325): Found data context element: <null> (OK)
System.Windows.Data Warning: 70 :     Lookup name PåstandsListe:  queried Button (hash=426476)
System.Windows.Data Warning: 63 : BindingExpression (hash=8957325): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=8957325): Found data context element: <null> (OK)
System.Windows.Data Warning: 70 :     Lookup name PåstandsListe:  queried Button (hash=426476)
System.Windows.Data Warning: 63 : BindingExpression (hash=8957325): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=8957325): Found data context element: <null> (OK)
System.Windows.Data Warning: 70 :     Lookup name PåstandsListe:  queried Button (hash=426476)
System.Windows.Data Warning: 63 : BindingExpression (hash=8957325): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=8957325): Found data context element: <null> (OK)
System.Windows.Data Warning: 70 :     Lookup name PåstandsListe:  queried Button (hash=426476)
System.Windows.Data Warning: 63 : BindingExpression (hash=8957325): Resolving source 
System.Windows.Data Warning: 66 : BindingExpression (hash=8957325): Found data context element: <null> (OK)
System.Windows.Data Warning: 70 :     Lookup name PåstandsListe:  queried Button (hash=426476)
System.Windows.Data Warning: 63 : BindingExpression (hash=8957325): Resolving source  (last chance)
System.Windows.Data Warning: 66 : BindingExpression (hash=8957325): Found data context element: <null> (OK)
System.Windows.Data Warning: 70 :     Lookup name PåstandsListe:  queried Button (hash=426476)
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=PåstandsListe'. BindingExpression:Path=SelectedItem; DataItem=null; target element is 'Button' (Name=''); target property is 'CommandParameter' (type 'Object')
Run Code Online (Sandbox Code Playgroud)

更改没有任何影响:

  • 绑定到UserControl2的父元素而不是UserControl2.

非失败场景(这里的ElementName绑定有效):

  • UserControl2未放置在UserControl1中.
  • 按钮作为子项添加到UserControl1而不是UserControl2.

此外,当我将Snoop附加到应用程序时,当我在Snoop中选择Button时,ElementName绑定开始工作(但是VS Output窗口中没有显示任何信息).Snoop会以某种方式刷新绑定吗?

更新

似乎问题只发生在Button最初不可见时,例如放置在不可见的Expander og TabItem中.

Aka*_*ava 5

Tabs和Expander控件通常不会创建和初始化项目,除非它们是可见的,只有在第一次显示它们时,才会创建项目并初始化这就是为什么第一次绑定可能会失败.当没有创建元素时,没有这种解决方案,因为它没有出现在可视化树中.

原因很简单,如果你有一个模板控件,控件模板就不会创建,直到控件可见并添加到可视树中.由于这个原因,模板内的项目不存在且无法绑定,现在Tabs和Expander的子项等不会与父项一起创建.

Snoop可能会强制创建元素,这就是它出现的原因.