從非視圖中在mvvmcross中打開視圖的正確方法是什麼?從視圖模型中,我們將使用ShowViewModel <>(..)。在mvvmcross中顯示來自非視圖/視圖模型的視圖
具體而言,我們正在響應打開應用程序(具有自定義有效內容)的應用程序的推送通知,該應用程序指示應加載的視圖。
我們有一個解決辦法hackety只是概念驗證,只是想獲得正確的做法MVX的想法
從非視圖中在mvvmcross中打開視圖的正確方法是什麼?從視圖模型中,我們將使用ShowViewModel <>(..)。在mvvmcross中顯示來自非視圖/視圖模型的視圖
具體而言,我們正在響應打開應用程序(具有自定義有效內容)的應用程序的推送通知,該應用程序指示應加載的視圖。
我們有一個解決辦法hackety只是概念驗證,只是想獲得正確的做法MVX的想法
我不認爲有一個「正確的方式」 - 我認爲這取決於你的應用程序以及你需要做什麼。
對於一些特定情況 - 例如ViewModel->視圖模型和AppStart的 - MvvmCross提供了一些方便的方法:
ShowViewModel
在MvxViewModel
但總體,任何類可以通過調用請求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 });
}
}
http://forums.xamarin.com/discussion/4694/conditionally-call-registerappstart-with-mvvmcross
檢查上面的鏈接,你會得到的想法
在我的情況,我想從二級tile.For該啓動應用程序,我要推出爲中特定頁面瓦。
我的初始應用程序開始視圖模型是LoginViewModel,我的自定義應用程序開始視圖模型是HomeViewModel。
我把它從App.cs(核心)控制到MyCustomAppStart類。
參考上面的鏈接
啊IMvxViewDispatcher正是我一直在尋找! INavigateMyselfService與我所做的類似,除了我的實現是..不是很漂亮 – geoffreys
@Stuart感謝您所做的所有工作,特別是在Xamarin社區!這是完美的。我正在使用它來處理未經授權的例外,我的應用程序。如果我發現這樣的異常,我現在可以使用它來輕鬆導航到登錄屏幕。 – dynamokaj
@Stuart我們在導航到SplashScreenViewModel的場景以及間隔後到MainViewModel的場景中看到隨機故障在視圖模型之間導航。兩者都使用ShowViewModel(); API。 我們以「mvx:Diagnostic:70.22顯示ViewModel MainViewModel」的日誌結束,但應用程序停留在SplashScreenViewModel上。 任何提示這裏如何調試它? Thnx! –
baraka