2013-05-21 50 views
13

從非視圖中在mvvmcross中打開視圖的正確方法是什麼?從視圖模型中,我們將使用ShowViewModel <>(..)。在mvvmcross中顯示來自非視圖/視圖模型的視圖

具體而言,我們正在響應打開應用程序(具有自定義有效內容)的應用程序的推送通知,該應用程序指示應加載的視圖。

我們有一個解決辦法hackety只是概念驗證,只是想獲得正確的做法MVX的想法

回答

16

我不認爲有一個「正確的方式」 - 我認爲這取決於你的應用程序以及你需要做什麼。

對於一些特定情況 - 例如ViewModel->視圖模型和AppStart的 - MvvmCross提供了一些方便的方法:

但總體,任何類可以通過調用請求ShowViewModel

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

此外,有一個鹼基C lass - MvxNavigatingObject.cs - 它可以提供幫助(它是MvxViewModel和MvxAppStart的基類) - 因此您可以輕鬆地提供一個或多個服務,如INavigateMyselfService誰的實現從MvxNavigatingObject繼承。

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

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

啊IMvxViewDispatcher正是我一直在尋找! INavigateMyselfService與我所做的類似,除了我的實現是..不是很漂亮 – geoffreys

+0

@Stuart感謝您所做的所有工作,特別是在Xamarin社區!這是完美的。我正在使用它來處理未經授權的例外,我的應用程序。如果我發現這樣的異常,我現在可以使用它來輕鬆導航到登錄屏幕。 – dynamokaj

+0

@Stuart我們在導航到SplashScreenViewModel的場景以及間隔後到MainViewModel的場景中看到隨機故障在視圖模型之間導航。兩者都使用ShowViewModel (); API。 我們以「mvx:Diagnostic:70.22顯示ViewModel MainViewModel」的日誌結束,但應用程序停留在SplashScreenViewModel上。 任何提示這裏如何調試它? Thnx! – baraka

相關問題