Nie ma łatwego, uniwersalnego sposobu, aby wiedzieć, kiedy do dispose
ViewModel - szczególnie po rozpoczęciu miksowania i dopasowywania stylów prezentacji ViewModel do nawigacji, tabulatorów, podzielników, wysuwanych, fragmentów, list itp., A wraz z nimi coraz więcej platformy
wskutek tego, kilka sposobów i zamknąwszy rzeczy jak liczniki dół w przeszłości są:
1. Czasami Użyłem specjalistyczny interfejs na ViewModel i zapewnienia tego jest wywoływany odpowiednio na każdym kliencie.
Na przykład, zrobiłem trochę załączania/wyłączania Strona "poziom Wyświetleń używając:
- OnPause/OnResume w Androidzie
- OnNavigatedTo/OnNavigatingFrom w Windows
- ViewDidAppear/ViewWillDisappear w iOS
Myślałem o dodaniu tego jako uogólnionego wzorca do tego celu (jest on zalogowany https://github.com/slodge/MvvmCross/issues/74) - ale do tej pory nie dodałem tego do wersji v3, ponieważ atrament doprowadziłby do zbyt wielu nieporozumień wśród użytkowników - lepiej pozwolić im to zrobić w nielicznych sytuacjach, w których jest to potrzebne.
Aktualizacja: Mam blogu na ten temat i opublikował próbki - patrz http://slodge.blogspot.co.uk/2013/11/n42-is-my-viewmodel-visible-can-i-kill.html
2. Czasami mam tylko używane Event Aggregation przez MvvmCross Messenger - i użyłem to nieodłączne WeakReference
- oparte na wiadomościach, aby upewnić się, że ViewModel może zostać zbuforowany po zakończeniu widoku.
Przykładem tego jest próbą InternetMinute - który ma jeden „usługę generacji Tick”, który ViewModels może łączyć się za pośrednictwem wiadomości o aktualizacjach - patrz:
można rozważyć ten nieznacznie nieefektywne - jak komunikaty Tick zostanie wygenerowany nawet jeśli ViewModel nie jest obecny - ale to tylko niewielka INEF ficiency.
3. ja uważane za pomocą więcej końcowe wydarzenia - takie rzeczy jak OnNavigatingFrom(BACK)
i „onDestroy” i trochę „ostateczny” wykrywanie na delegatów UINavigationController ... ale ja nie miałem powodu, aby to zrobić „dla prawdziwe "na każdym projekcie jeszcze.
Niestety - nie rozumiem Twojego scenariusza. Jeśli podasz znacznie więcej szczegółów, postaram się pomóc. Może dostarczyć pełny przykład Widok i ViewModel, który wymaga usunięcia – Stuart
@Stuart, zaktualizowane pytanie –