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 从零开始模拟器的配置与连接