Xamarin/Mvvmcross:收到 iOS 推送通知时打开不同的视图控制器

Posted

技术标签:

【中文标题】Xamarin/Mvvmcross:收到 iOS 推送通知时打开不同的视图控制器【英文标题】:Xamarin/Mvvmcross: Open a different view controller when a iOS push notification is received 【发布时间】:2014-10-18 11:07:06 【问题描述】:

我发现这个问题是使用 Objective-c 提出的,但我无法将其翻译成 C#

例如 open-specific-view-when-opening-app-from-notification

基本上我想这样做:

public override void ReceivedRemoteNotification (UIApplication application, NSDictionary userInfo)
    
        string alert = (aps[new NSString("alert")] as NSString).ToString();
        Debug.WriteLine ("I want to open a specific ViewController and pass in my alert");
    

我实际上是在使用 mvvmcross 来管理我的视图导航。所以理想情况下,我想以某种方式使用 mvvmcross 实现这种导航。在 mvvmcross 中,我将通过以下方式导航到我的 ViewControler:

            this.ShowViewModel<SpecificControllerViewModel>();

谢谢

【问题讨论】:

【参考方案1】:

如果您查看 ShowViewModel() 的参数,它可以将值传递给视图模型

这是在here 连同示例一起描述的

您可以通过几种方式实现这一目标。 您可以使用自定义消息。视图模型可以注册以接收消息,然后您从 ReceivedRemoteNotification 发送消息 阅读 here 关于 MvvmCross 中的信使。

或者,您可以调用 ShowViewModel。如果您查看 ShowViewModel 是如何实现的 here,它使用 IMvxViewDispatcher 单例服务,因此您可以使用以下实用方法:

    static void ShowViewModel<T>(object parameter) where T : IMvxViewModel
    
        var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>();
        var request = MvxViewModelRequest.GetDefaultRequest(typeof(T));
        request.ParameterValues = ((object)parameter).ToSimplePropertyDictionary();
        viewDispatcher.ShowViewModel(request);
    

我在我的博客here 上发布了这个消息。

我认为即使在应用程序未运行时收到通知的情况下(由FinishedLaunching接收),第二种方式也可以工作

【讨论】:

你好安德烈。是的,我知道这一点。但是如何从 ReceivedRemoteNotification 事件中获取到我的视图模型是我的问题 这回答了你的问题吗?

以上是关于Xamarin/Mvvmcross:收到 iOS 推送通知时打开不同的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

TabbedPage 内的 xamarin mvvmcross TabbedPage

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

Xamarin MVVMCross:注册具有多个接口的类的单例

xamarin + MvvmCross 从零开始模拟器的配置与连接

无法在我的 Xamarin MvvmCross Android 应用程序中注册推送“预计为虚拟类型”

可移植类库配置文件 78 缺少属性相关的方法/属性