Я пишу приложение, используя шаблон MVVM (Model-View-ViewModel), и использую биты Prism и Unity от команды Microsoft P & P.
У меня есть вид со списком предметов. Эти элементы содержатся с ObservableCollection в ViewModel, к которой привязан список данных в представлении (ViewModel устанавливается как DataContext представления). Во ViewModel у меня работает таймер, который запускает опрос сервера на наличие новых данных каждые 30 секунд. Когда данные возвращаются, я направляю их в поток пользовательского интерфейса и добавляю новые данные в коллекцию ObservableCollection. Это все работает очень хорошо.
Проблема, с которой я столкнулся, заключается в том, что мне нужен таймер для остановки при закрытии представления. Я не уверен, какое событие смотреть здесь. Есть ли что-то в Unity, что скажет мне, когда представление будет заменено в регионе? Есть ли событие, которое лучше всего использовать для этого в представлении, и, возможно, передать это событие (или фасад) в ModelView? My View - это UserControl для каждого примера P & P. Не найдено ни одного события «Unload», ни метода для переопределения.
Я уже думаю о написании собственного сервиса для обработки изменений представления (своего рода фасад для RegionManager), и я мог бы просто реализовать общий интерфейс в моих представлениях, чтобы выполнить очистку или реализовать IDisposable на них, когда они удаляются из Посмотреть. Однако, если есть чистый способ сделать это с ограничениями базовой платформы Silverlight или Unity / Prism, я бы предпочел пойти по этому пути.
Редактировать - Ответ:
Я закончил тем, что отметил ответ Андерсона Имеса, просто выбрав тот, который был наиболее близок к тому, что я делаю, для моего решения. Но на самом деле, я использую части от PL и GraemeF, а также проголосовал за всех. Это был отличный ответ для меня, так как он дал мне лучшее представление о регионах, дал мне еще одну структуру, на которую я посмотрел, и убедился, что я, вероятно, пошел по правильному пути с внедрением сервиса для обработки изменений представления вместо простого вызова в RegionManager.