何时应用数据绑定?

时间:2012-12-14 09:06:48

标签: wpf data-binding

对象生命周期的什么时候首次解析绑定?

这是一个简单的问题,但我无法在书籍或谷歌中找到任何信息。

1 个答案:

答案 0 :(得分: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并导致解析绑定。 / p>

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