9

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

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

4

1 回答 1

7

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

这里有两个简单的例子:

如果有界属性由不在 ControlTemplate 内的 WPF 控件拥有,则在第一次调用 UpdateLayout方法时,如果已设置 DataContext,则很可能会首次解析绑定。如果 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类。这些是在依赖属性上使用绑定时负责推送正确数据的类。

于 2012-12-14T12:57:07.903 回答