在 mvvmcross 中显示非视图/视图模型的视图

Posted

技术标签:

【中文标题】在 mvvmcross 中显示非视图/视图模型的视图【英文标题】:Show view from non-view/viewmodel in mvvmcross 【发布时间】:2013-05-21 05:49:07 【问题描述】:

从非视图打开 mvvmcross 视图的正确方法是什么?在视图模型中,我们将使用 ShowViewModel(..)。

具体来说,我们正在响应打开应用程序(带有自定义有效负载)的推送通知,该通知指示应加载的视图。

我们有一个简单的解决方法只是为了证明概念,只是想了解正确的 MVX 方法

【问题讨论】:

【参考方案1】:

我认为没有“正确的方法” - 我认为这取决于您的应用以及您需要它做什么。

对于某些特定情况 - 例如ViewModel->ViewModel 和 AppStart - MvvmCross 提供了一些方便的方法:

您可以在MvxViewModel中拨打ShowViewModel 可以覆盖应用程序启动以使用提示对象 - 请参阅https://speakerdeck.com/cirrious/appstart-in-mvvmcross

但总的来说,任何班级都可以通过以下方式请求ShowViewModel

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

此外,还有一个基类 - MvxNavigatingObject.cs - 可以帮助解决这个问题(它是 MvxViewModel 和 MvxAppStart 的基类) - 因此您可以轻松地提供一个或多个服务,例如 INavigateMyselfService,其实现继承自 @987654328 @。

  public interface INavigateMyselfService
  
      void GoWild(string side);
  

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

【讨论】:

啊 IMvxViewDispatcher 正是我想要的! INavigateMyselfService 与我所做的类似,除了我的实现是……不漂亮 @Stuart 感谢您所做的所有工作,尤其是在 Xamarin 社区中!这简直太完美了。我正在使用它来处理整个应用程序中的未经授权的异常。如果我发现这样的异常,我现在可以使用它轻松导航到登录屏幕。 @Stuart 在导航到 SplashScreenViewModel 并在一段时间后导航到 MainViewModel 的场景中,我们看到在视图模型之间导航随机失败。两者都使用 ShowViewModel(); API。我们以“mvx:Diagnostic: 70.22 Showing ViewModel MainViewModel”的日志结束,但应用程序仍在 SplashScreenViewModel 上。这里有任何提示如何调试它?谢谢!【参考方案2】:

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

查看上面的链接,你会明白的

就我而言,我想从辅助磁贴启动应用程序。为此,我必须启动辅助磁贴的特定页面。

我的初始应用启动视图模型是 LoginViewModel,我的自定义应用启动视图模型是 HomeViewModel。

我从 App.cs (Core) 控制到 MyCustomAppStart 类。

参考以上链接

【讨论】:

以上是关于在 mvvmcross 中显示非视图/视图模型的视图的主要内容,如果未能解决你的问题,请参考以下文章

使用 mvvmcross 显示视图模型时无法解析当前的***活动

如何使用 MVVMCross 构建视图模型

如何在 mvvmcross 视图模型中使用异步?

MvvmCross - 在启用链接所有程序集的情况下缺少视图模型参数

MvvMCross 导航回多个视图模型/截断导航堆栈

如何通过 Xamarin MvvmCross 中的 BottomNavigationView 在视图模型之间导航