如何回应MVVMCross UWP应用程序中的toast通知

时间:2017-03-18 18:24:52

标签: uwp mvvmcross

我有一个用MVVPCross编写的Windows UWP应用程序。当用户单击Toast Notifcation消息时,将调用应用程序OnActivated。

protected override void OnActivated(IActivatedEventArgs e)
{
    // Handle toast activation
    if (e is ToastNotificationActivatedEventArgs)
    {
        var toastActivationArgs = e as ToastNotificationActivatedEventArgs;

    }
}

当我得到这个事件时,它想:

  • 清除导航历史记录
  • 使用toast事件传递给它的信息重新导航到主页
  • 然后主页将重新加载并根据传递给它的信息设置初始选择

我正在寻找如何通过mvvmcross框架强制导航的指导。我知道如何从一个视图模型导航到另一个视图模型,但在这种情况下,我不在视图或视图模型的上下文中 - 我在Windows.UI.Xaml.Application的上下文中对象

感谢, 迈克尔

2 个答案:

答案 0 :(得分:1)

我认为你唯一需要的是当前帧的实例

        if (args.Kind == ActivationKind.ToastNotification)
        {
            try
            {
                if (args.PreviousExecutionState == ApplicationExecutionState.Running)
                {
                    var fr = Window.Current.Content as Frame;
                    var toastActivationArgs = args as ToastNotificationActivatedEventArgs;
                    fr.Navigate(typeof(MainPage), toastActivationArgs);
                }
            }
            catch { }
        }

在MainPage OnNavigatedTo操作中,您可以获取导航参数并执行任何操作。

答案 1 :(得分:1)

我对MVVMCross没有太多经验,但快速谷歌搜索让我加快了速度。事情就是这样:

  1. 要清除导航后退堆栈(导航历史记录),请参阅this blog。它定义了一种干净的方法。堆栈上的this answer确实提供了更多应用程序观点的见解。
  2. 要从主页导航,您需要获取实际托管您应用的Frame的当前实例。所以快速Frame rootFrame = Window.Current.Content as Frame;应该让你完成。有关详细信息,请参阅文档here。在网站上快速搜索“当前”,您将找到代码
  3. 要刷新页面,您可以在堆栈上引用This question