c# - Mvvmcross:处理全局应用程序事件

标签 c# mobile mvvm xamarin mvvmcross

使用 MvvmCross,实现全局应用程序事件的野兽方式是什么?

案例 1:应用程序启动 - 我想 PIN 保护我的应用程序,所以在 FinishedLaunching 我想要一些对象来检查 PIN 是否已设置,如果未设置,则启动模态视图以询问用户输入 PIN。模态视图应该隐藏下面的导航而不弹出或修改任何加载的 View 。

案例 2:注销 - 用户通过 mvvm 命令从应用程序中删除 PIN,并且模态视图会阻止所有其他 View 而不卸载它们。在这种情况下,存储 PIN 的模型会发布一个事件,有些人应该让该事件显示模态视图。

这可能很容易在 appdelegate 上实现,但我想知道是否有更好的 MVVM 方式来执行此操作,即应用程序本身的某种 ViewModel 响应暴露核心库中行为的事件。

最佳答案

如果您希望在应用程序/单例级别处理这些类型的事件,那么您可以使用以下方法轻松完成此操作:

  • 在每个使用 Messenger 的 UI 项目中初始化的某种专业服务收听消息的插件
  • 每个平台上的某种原生对象,用于在关键原生事件发生时发送消息
  • 附加 ICommand ViewModel 中的实现s 发送用户发起的事件

  • MvvmCross 实际上包含一个初始实现来帮助 2 - 每个平台都提供一个单例 IMvxLifetime目的
  • https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/Platform/IMvxLifetime.cs
  • https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/Platform/MvxLifetimeEventArgs.cs

  • 这是在每个平台上实现的,使用:
  • 安卓 - https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Droid/Views/MvxAndroidLifeTimeMonitor.cs
  • 触摸-https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Touch/Platform/MvxApplicationDelegate.cs
  • 手机https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.WindowsPhone/Platform/MvxPhoneLifetimeMonitor.cs

  • 然而,在实践中,这 IMvxLifetime实现从未被特别频繁地使用 - 当然,当我使用它几次时,我发现自己不得不在几个平台上解决问题。

    关于c# - Mvvmcross:处理全局应用程序事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21527386/

    相关文章:

    c# - 使用多个参数启动任务的标准做法是什么

    c# 检测换行

    android - jquery mobile - Android 手机上的视口(viewport)值

    WPF DataGrid 使用 MVVM 添加、更新和删除

    c# - Entity Framework 4.1 POCO - 多对多加载

    c# - AOP 脏跟踪

    css - 如何在 Opera Mobile 中覆盖 'Text wrapping'

    html - 如何编写一个弹出文本框,该文本框仅在屏幕垂直翻转时出现在移动设备上,而在水平翻转时消失?

    wpf - 在 WPF 中实现 MVVM 而不使用 System.Windows.Input.ICommand

    mvvm - HTML 中声明的剑道窗口如何打开?