9

バインディングが初めて解決されるのは、オブジェクトのライフサイクルのどの時点ですか?

簡単な質問ですが、本でもGoogleでも情報が見つかりません。

4

1 に答える 1

7

実際にはそれほど単純ではありません。この質問に対する直接的な答えは得られません。それは文脈に依存します。

以下に 2 つの簡単な例を示します。

バインドされたプロパティが 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クラスを確認する必要があります。これらは、依存関係プロパティでバインディングを使用するときに正しいデータをプッシュする責任を負うクラスです。

于 2012-12-14T12:57:07.903 に答える