2013-05-21 12 views
13

Jaki jest poprawny sposób otwierania widoku w mvvmcross z poziomu innego niż widok? Z poziomu viewmodel użyjemy ShowViewModel <> (..).Pokaż widok z non-view/viewmodel w mvvmcross

W szczególności odpowiadamy na powiadomienie push otwierające aplikację (z niestandardowym ładunkiem), która dyktuje widok, który powinien zostać załadowany.

Mamy obejścia hackety tylko na dowód koncepcji, po prostu chciałem, aby zorientować prawidłowego podejścia MVX

Odpowiedz

16

nie sądzę istnieje „właściwy sposób” - myślę, że to zależy od aplikacji i czego potrzebujesz.

Dla niektórych szczególnych przypadków - np. ViewModel-> ViewModel i AppStart - MvvmCross oferuje kilka wygodnych metod:

Ale ogólnie , każda klasa może poprosić o ShowViewModel pod numerem:

  var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>(); 
     viewDispatcher.ShowViewModel(new MvxViewModelRequest(
                viewModelType, 
                parameterBundle, 
                presentationBundle, 
                requestedBy)); 

Ponadto, istnieje podstawa c lass - MvxNavigatingObject.cs - która może w tym pomóc (jest to klasa podstawowa MvxViewModel i MvxAppStart) - dzięki czemu możesz łatwo dostarczyć jedną lub więcej usług, takich jak INavigateMyselfService, której implementacje dziedziczą po MvxNavigatingObject.

public interface INavigateMyselfService 
    { 
     void GoWild(string side); 
    } 

    public class NavigateMyselfService 
    : MvxNavigatingObject 
    , INavigateMyselfService 
    { 
     public void GoWild(string side) 
     { 
      ShowViewModel<WildViewModel>(new { side = side }); 
     } 
    } 
+1

Ah IMvxViewDispatcher był dokładnie tym, czego szukałem! INavigateMyselfService jest podobny do tego, co zrobiłem, z tym, że moja implementacja była ... nie ładna – geoffreys

+0

@Stuart dzięki za całą pracę, którą wykonujesz, szczególnie w społeczności Xamarin! To jest po prostu idealne. Używam go do obsługi nieautoryzowanych wyjątków po całej mojej aplikacji. Jeśli złapię taki wyjątek, mogę teraz użyć tego do łatwej nawigacji do ekranu logowania. – dynamokaj

+0

@Stuart Widzimy losowe awarie, aby nawigować między modelami widoku w scenariuszu, w którym nawigujemy do SplashScreenViewModel i po interwale do naszego MainViewModel. Oba używają ShowViewModel (); API. Kończymy z logiem "mvx: Diagnostic: 70.22 Pokazuje ViewModel MainViewModel", ale aplikacja pozostaje na SplashScreenViewModel. Dowolna wskazówka, jak to debugować? Thnx! – baraka

0

http://forums.xamarin.com/discussion/4694/conditionally-call-registerappstart-with-mvvmcross

Sprawdź powyższy link i dostaniesz pomysł

w moim przypadku, chcę uruchomić aplikację z wtórnym tile.For to muszę uruchomić konkretną stronę do wtórnego dachówka.

Moja początkowa aplikacja Model uruchamiania to LoginViewModel, a moim modelem widoku startowego aplikacji niestandardowej jest HomeViewModel.

Kontrolowałem to od klasy App.cs (Core) do MyCustomAppStart.

Zobacz powyższy link