【问题标题】:When are data bindings applied?何时应用数据绑定?
【发布时间】:2012-12-02 06:27:27
【问题描述】:

在对象生命周期的什么时间第一次解析绑定?

这是一个简单的问题,但我在书中或通过 Google 都找不到任何信息。

【问题讨论】:

    标签: wpf data-binding


    【解决方案1】:

    其实没那么简单,你不会得到这个问题的直接答案。这取决于上下文。

    这里有两个简单的例子:

    如果有界属性由不在 ControlTemplate 内的 WPF 控件拥有,如果 DataContext 已设置,则在第一次调用 UpdateLayout 方法时很可能会首次解析绑定. 如果没有设置DataContext,会在控件加载后尝试解析:见下面的DataBindEngine.RequestRun()

    private void RequestRun()
    {
        base.Dispatcher.BeginInvoke(DispatcherPriority.DataBind, new DispatcherOperationCallback(this.Run), false);
        base.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new DispatcherOperationCallback(this.Run), true);
    }
    

    但是,如果有界属性由 ControlTemplate 内的 WPF 控件拥有,则它将在第一次布局传递期间首次解析,这将触发 ApplyTemplate 并导致解析绑定。

    这些只是具体的例子,如果你想完全了解绑定机制,你应该使用反射器看看MS.Internal.Data.DataBindEngineSystem.Windows.Data.BindindExpression类。这些是在依赖属性上使用绑定时负责推送正确数据的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2021-12-25
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多