À quel moment du cycle de vie de l'objet les liaisons sont-elles résolues pour la première fois?Quand les liaisons de données sont-elles appliquées?
C'est une question simple mais je ne trouve aucune information ni dans les livres ni par Google.
À quel moment du cycle de vie de l'objet les liaisons sont-elles résolues pour la première fois?Quand les liaisons de données sont-elles appliquées?
C'est une question simple mais je ne trouve aucune information ni dans les livres ni par Google.
Ce n'est pas si simple en fait, vous n'aurez pas de réponse claire à cette question. Ça dépend du contexte.
Voici deux exemples simples:
Si la propriété limitée appartient à un contrôle WPF qui ne sont pas dans un ControlTemplate, pour la première fois la liaison sera très probablement résolu lorsque la méthode UpdateLayout est appelée pour la première fois, si le DataContext est déjà défini. Si le DataContext n'a pas été défini, il va essayer de résoudre après le contrôle est chargé: voir le DataBindEngine.RequestRun() ci-dessous
private void RequestRun()
{
base.Dispatcher.BeginInvoke(DispatcherPriority.DataBind, new DispatcherOperationCallback(this.Run), false);
base.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new DispatcherOperationCallback(this.Run), true);
}
Si la propriété est la propriété limitée d'un contrôle WPF qui se trouve dans un ControlTemplate cependant, il sera résolu pour la première fois pendant le premier passage de mise en page qui déclenchera un ApplyTemplate et conduira à la résolution de la liaison. Ce ne sont que des exemples spécifiques, si vous voulez comprendre complètement les mécanismes de liaison, vous devriez utiliser le réflecteur pour jeter un oeil aux classes MS.Internal.Data.DataBindEngine
et System.Windows.Data.BindindExpression
. Ce sont les classes chargées de pousser les bonnes données lors de l'utilisation des liaisons sur les propriétés de dépendance.