На каком этапе жизненного цикла элементов Silverlight UIElement удаляются существующие привязки? - PullRequest
2 голосов
/ 26 ноября 2010

Я пытаюсь понять, почему некоторые из моих элементов управления Silverlight остаются в памяти. Я заметил, что когда я ухожу со страницы с включенными элементами управления, остаются ссылочные ссылки на модель представления. Эти ссылки являются результатом оставшихся подписок на событие ErrorsChanged (моя модель представления реализует INotifyDataError), созданных при создании привязок между страницей и моделью представления. В какой-то момент некоторые, но не все привязки удалены, и я не могу понять, почему этого не происходит.

В какой момент жизненного цикла элементов Silverlight UIEment существующие привязки удаляются?

1 Ответ

0 голосов
/ 27 ноября 2010

Думаю, теперь я знаю ответ на этот вопрос.Пожалуйста, поправьте меня, если я ошибаюсь.Привязки не удалены.Вместо этого создаются ссылочные ссылки (например, события INotifyDataError передаются) в результате конкретной реализации Binding.В простейшем случае это когда DataContext изменяется.

Допустим, вы устанавливаете DataContext страницы на новый, другой объект INotifyDataError, когда загружаете его.Если на вашей странице есть привязки (к DataContext), то эта страница не является кандидатом на сборку мусора, пока объект DataContext не будет уничтожен.Это потому, что DataContext содержит ссылку на страницу через событие ErrorsChanged.Если вы хотите, чтобы объект DataContext был собран, вам нужно установить для DataContext значение null в событии Unloaded страницы.

Насколько я понимаю, похоже, что правильным способом реализации DataContext (который отличается от страницы) является установка DataContext в событии Loaded на странице, а затем установка для DataContext значения null какстраница запускает событие Unloaded.Эта концепция применяет любой элемент Framework.

Кроме того, я не углублялся в Привязки элементов.Например, когда один элемент на странице привязан к свойству другого элемента.Я не уверен, когда ссылочные ссылки между этими объектами будут удалены.Я предполагаю, что это когда страница выгружается.Кто-нибудь знает ответ на этот вопрос?

...