W MvvmCross v3 udostępniliśmy specjalny mechanizm umożliwiający ViewModels wysyłanie wiadomości do interfejsu użytkownika, który chciałby zmienić bieżącą prezentację.
Ten mechanizm to ChangePresentation(MvxPresentationHint hint)
i zapewnia routing wiadomości - wskazówek prezentacji - od ViewModels
do Presenter
.
W jaki sposób Presenter
obsługuje te wiadomości, zależy od platformy i aplikacji.
Ten mechanizm komunikatów jest bardzo ogólny i może być wykorzystywany do wszelkiego rodzaju czynności w przyszłości - np. twórcy mogą dostarczać podpowiedzi, które zmieniają układ interfejsu użytkownika, który podkreśla część interfejsu użytkownika, co zmusza użytkownika do skupienia się na określonej kontroli, która powoduje wyświetlanie lub ukrywanie SIP itp.
W przypadku zamknięcia widoku modelu, podajemy specjalizację MvxPresentationHint
- MvxClosePresentationHint
- i metody pomocnika w klasie bazowej MvxViewModel
:
protected bool Close(IMvxViewModel viewModel)
{
return ChangePresentation(new MvxClosePresentationHint(viewModel));
}
Aby korzystać z tej ViewModel może zadzwoń Close(this)
Kiedy to się nazywa, prezenter w swoim interfejsie otrzyma wiadomość o sposobie ChangePresentation
:
public interface IMvxViewPresenter
{
void Show(MvxViewModelRequest request);
void ChangePresentation(MvxPresentationHint hint);
}
W ogólnym/typowym przypadku - gdzie ViewModel
który jest zamknięty jest dołączony do widoku, który jest najwyższy Activity
/Page
/UIViewController
, prezenterzy domyślne w MvvmCross będzie w stanie obsłużyć tę wiadomość i będzie mógł do GoBack
w systemie Windows, do Finish
w systemie Android oraz do PopViewController
w systemie iOS.
Jeśli jednak Twój interfejs jest bardziej skomplikowany - np. jeśli ViewModel
chcesz Close
faktycznie odpowiada Tab
, Flyout
, SplitView
okienku, itp., lub jeśli ViewModel
odpowiada innemu niż aktualny najwyższy widok w hierarchii - to musisz podać niestandardowego prezentera implementacja - i ta implementacja będzie musiała wykonać specyficzną dla platformy i aplikacji logikę obsługi Close
.
Powyższa wskazówka jest to, co ja polecam użyć ...
Jednakże, jako alternatywa:
Jeśli było czuć ten ChangePresentation(MvxPresentationHint hint)
mechanizm był po prostu zbyt dużej gramaturze/przesadą do aplikacji, możesz też, oczywiście, przejść do niestandardowego lub opartego na mechanizmie opartego na Message
.
Jedna próbka, która robi to próbka CustomerManagement - zapewnia implementację niestandardowy IViewModelCloser na każdej platformie - patrz:
Widzę i jak powiedziałeś, że można dziedziczyć po prezenterach platform, przesłonić ChangePresenter i powiedzieć Mvx, aby użył nowego prezentera. –