2010-11-26 3 views
2

Je suis en train de comprendre pourquoi certains de mes contrôles Silverlight sont hébergés en mémoire. J'ai remarqué que lorsque je m'éloigne d'une page avec les contrôles, il reste des liens référentiels vers le modèle de vue. Ces liens sont le résultat des abonnements plus laissés à l'événement ErrorsChanged (mon modèle de vue implémente INotifyDataError) créé lors de liaisons sont créées entre la page et le modèle de vue. À un moment ou à un autre, certains liens ne sont pas supprimés et je n'arrive pas à comprendre pourquoi cela ne se produit pas.À quelle étape du cycle de vie de Silverlight UIEments les liaisons existantes sont-elles supprimées?

À quel moment dans le cycle de vie de UIElements Silverlight consolidations existantes ne faire retirer?

Répondre

0

Je pense que je sais maintenant la réponse à cette question. Corrigez-moi si j'ai tort, s'il-vous plait. Les liaisons sont et non supprimées. A la place, des liens référentiels sont créés (par exemple, les événements INotifyDataError sont câblés) à la suite d'une instanciation particulière d'une liaison. Dans le cas le plus simple, le DataContext change.

Disons que vous définissez le DataContext d'une page à une nouvelle autre objet INotifyDataError que vous chargez. S'il existe des liaisons sur votre page (au DataContext), la page n'est pas candidate à la récupération de place tant que l'objet DataContext n'est pas détruit. En effet, le DataContext contient une référence à la page via son événement ErrorsChanged. Si vous souhaitez que l'objet DataContext soit collecté, vous devez définir le DataContext sur null dans l'événement Unloaded de la page. Autant que je le comprends, il semble que le modèle approprié pour implémenter un DataContext (qui est différent de la page) est de définir le DataContext dans l'événement Loaded sur la page, puis de définir le DataContext à null comme la page déclenche son événement Unloaded. Ce concept applique n'importe quel élément de cadre.

En aparté, je n'ai pas puisé dans Manchettes élément. Par exemple, lorsqu'un élément d'une page est lié à une propriété d'un autre élément. Je ne suis pas sûr quand les liens référentiels entre ces objets sont supprimés. Je présume que c'est quand la page est déchargée. Quelqu'un connaît la réponse à cela?