IsEmpty
is being resolved from CollectionView.IsEmpty
how?
I applied high tracing for the binding
Visibility="{Binding ElementName=entry,
PresentationTraceSources.TraceLevel=High,
Path=Text.IsEmpty,
Converter={StaticResource BooleanToVisibilityConverter}}"
and here is the result
System.Windows.Data Warning: 56 : Created BindingExpression (hash=40147308) for Binding (hash=39658150)
System.Windows.Data Warning: 58 : Path: 'Text.IsEmpty'
System.Windows.Data Warning: 60 : BindingExpression (hash=40147308): Default mode resolved to OneWay
System.Windows.Data Warning: 61 : BindingExpression (hash=40147308): Default update trigger resolved to PropertyChanged
System.Windows.Data Warning: 62 : BindingExpression (hash=40147308): Attach to System.Windows.Controls.TextBlock.Visibility (hash=2939094)
System.Windows.Data Warning: 67 : BindingExpression (hash=40147308): Resolving source
System.Windows.Data Warning: 70 : BindingExpression (hash=40147308): Found data context element: <null> (OK)
System.Windows.Data Warning: 74 : Lookup name entry: queried TextBlock (hash=2939094)
System.Windows.Data Warning: 65 : BindingExpression (hash=40147308): Resolve source deferred
System.Windows.Data Warning: 67 : BindingExpression (hash=40147308): Resolving source
System.Windows.Data Warning: 70 : BindingExpression (hash=40147308): Found data context element: <null> (OK)
System.Windows.Data Warning: 74 : Lookup name entry: queried TextBlock (hash=2939094)
System.Windows.Data Warning: 78 : BindingExpression (hash=40147308): Activate with root item TextBox (hash=46768536)
System.Windows.Data Warning: 108 : BindingExpression (hash=40147308): At level 0 - for TextBox.Text found accessor DependencyProperty(Text)
System.Windows.Data Warning: 104 : BindingExpression (hash=40147308): Replace item at level 0 with TextBox (hash=46768536), using accessor DependencyProperty(Text)
System.Windows.Data Warning: 101 : BindingExpression (hash=40147308): GetValue at level 0 from TextBox (hash=46768536) using DependencyProperty(Text): ''
System.Windows.Data Warning: 108 : BindingExpression (hash=40147308): At level 1 - for String.IsEmpty found accessor <null>
System.Windows.Data Warning: 108 : BindingExpression (hash=40147308): At level 1 - for EnumerableCollectionView.IsEmpty found accessor RuntimePropertyInfo(IsEmpty)
System.Windows.Data Warning: 104 : BindingExpression (hash=40147308): Replace item at level 1 with EnumerableCollectionView (hash=40847598), using accessor RuntimePropertyInfo(IsEmpty)
System.Windows.Data Warning: 101 : BindingExpression (hash=40147308): GetValue at level 1 from EnumerableCollectionView (hash=40847598) using RuntimePropertyInfo(IsEmpty): 'True'
System.Windows.Data Warning: 80 : BindingExpression (hash=40147308): TransferValue - got raw value 'True'
System.Windows.Data Warning: 82 : BindingExpression (hash=40147308): TransferValue - user's converter produced 'Visible'
System.Windows.Data Warning: 89 : BindingExpression (hash=40147308): TransferValue - using final value 'Visible'
interesting lines from the above trace
System.Windows.Data Warning: 108 : BindingExpression (hash=40147308): At level 1 - for String.IsEmpty found accessor <null>
System.Windows.Data Warning: 108 : BindingExpression (hash=40147308): At level 1 - for EnumerableCollectionView.IsEmpty found accessor RuntimePropertyInfo(IsEmpty)
so you can see that indeed type String
does not have IsEmpty
for String.IsEmpty found accessor <null>
but the view for the string is an EnumerableCollectionView
which does have IsEmpty
and the binding resolved to the same
for EnumerableCollectionView.IsEmpty found accessor RuntimePropertyInfo(IsEmpty)
string
is an IEnumerable (contains characters) but not know about theCollectionView
created as the view behind the scene, this view does haveIsEmpty
property. – Glandular