What is a Cached acessor in the context of DataBinding?

后端 未结 1 1731
清酒与你
清酒与你 2021-01-23 17:20

I get this trace information for the binding:

    System.Windows.Data Warning: 55 : Created BindingExpression (hash=45919010) for Binding (hash=4523055)
    Sys         


        
相关标签:
1条回答
  • 2021-01-23 18:26

    I realy do not know WHY but this street magic helped!

    It was:

    <Setter Property="Helpers:FocusHelper.IsFocused" Value="{Binding IsEnvelopeFocused,
                                    Converter={StaticResource bdc}, 
                                    PresentationTraceSources.TraceLevel=High}"/>
    

    It became:

    <Setter Property="Helpers:FocusHelper.IsFocused" Value="{Binding DataContext.IsEnvelopeFocused, 
                                    Converter={StaticResource bdc}, 
                                    PresentationTraceSources.TraceLevel=High, 
                                    RelativeSource={RelativeSource Self}}"/>
    

    Data binding trace output changed:

    System.Windows.Data Warning: 55 : Created BindingExpression (hash=52742621) for Binding (hash=33023833)
    System.Windows.Data Warning: 57 :   Path: 'DataContext.IsEnvelopeFocused'
    System.Windows.Data Warning: 59 : BindingExpression (hash=52742621): Default mode resolved to TwoWay
    System.Windows.Data Warning: 60 : BindingExpression (hash=52742621): Default update trigger resolved to PropertyChanged
    System.Windows.Data Warning: 61 : BindingExpression (hash=52742621): Attach to System.Windows.Controls.DataGridCell.IsFocused (hash=34022436)
    System.Windows.Data Warning: 66 : BindingExpression (hash=52742621): Resolving source 
    System.Windows.Data Warning: 69 : BindingExpression (hash=52742621): Found data context element: <null> (OK)
    System.Windows.Data Warning: 71 :   RelativeSource.Self found DataGridCell (hash=34022436)
    System.Windows.Data Warning: 77 : BindingExpression (hash=52742621): Activate with root item DataGridCell (hash=34022436)
    System.Windows.Data Warning: 106 : BindingExpression (hash=52742621):   At level 0 using cached accessor for DataGridCell.DataContext: DependencyProperty(DataContext)
    
    System.Windows.Data Warning: 103 : BindingExpression (hash=52742621): Replace item at level 0 with DataGridCell (hash=34022436), using accessor DependencyProperty(DataContext)
    System.Windows.Data Warning: 100 : BindingExpression (hash=52742621): GetValue at level 0 from DataGridCell (hash=34022436) using DependencyProperty(DataContext): VulnerEnvelope (hash=14963839)
    
    System.Windows.Data Warning: 106 : BindingExpression (hash=52742621):   At level 1 using cached accessor for VulnerEnvelope.IsEnvelopeFocused: RuntimePropertyInfo(IsEnvelopeFocused)
    
    System.Windows.Data Warning: 103 : BindingExpression (hash=52742621): Replace item at level 1 with VulnerEnvelope (hash=14963839), using accessor RuntimePropertyInfo(IsEnvelopeFocused)
    System.Windows.Data Warning: 100 : BindingExpression (hash=52742621): GetValue at level 1 from VulnerEnvelope (hash=14963839) using RuntimePropertyInfo(IsEnvelopeFocused): 'False'
    System.Windows.Data Warning: 79 : BindingExpression (hash=52742621): TransferValue - got raw value 'False'
    System.Windows.Data Warning: 81 : BindingExpression (hash=52742621): TransferValue - user's converter produced 'False'
    System.Windows.Data Warning: 88 : BindingExpression (hash=52742621): TransferValue - using final value 'False'
    

    And binding now works in both ways.
    I thinks there's a broblem with DataGridCell's DataContext inheritance and style appplication.
    To be exact the order matters here, I suppose.
    If Style is applied first Data Binding tries to get not yet inherited DataContext and that somehow breaks binding causing no updates.
    I'll try to reproduce this bug and if I manage to do it, I'll write to MS Connect.

    0 讨论(0)
提交回复
热议问题