使用 MVVMCross 在 WPF 中捕获 OnExit 事件



当我的 MVVMCross WPF 应用程序退出时,即单击红色 X 时,我需要显式关闭并释放一个SerialPort对象。 为此,我需要调用当前视图模型的方法。

我一直在尝试通过遵循 MVVMCross n=42 视频并在实现 IKillableabstract BaseViewModel 类中添加一个带有 public abstract void KillMe() 方法的IKillable接口来做到这一点。 然后,在 WPF 项目中,我添加了一个 BaseView 类,就像他在视频中所做的那样。 此时,我能够访问当前视图模型的方法。

在视频中,示例是IOS,Droid和Windows Phone,可以在其中override诸如OnNavigatedTo等事件。在 WPF 中,没有我可以在BaseView类中override可用的OnExit()

我想知道,有什么方法可以在应用程序退出时调用当前视图模型的此方法?我能够做到这一点:

protected override void OnExit(ExitEventArgs e)
{
    // Do Something
    base.OnExit(e);
}

在 MVVMCross Nuget 包附带的App.Xaml.Mvx.cs类中,我相信这是放置程序退出时要执行的代码的正确位置。 问题是我没有对当前视图模型的任何引用。

如果有人能帮助我,我将不胜感激。谢谢!

编辑/更新:

我找到了一个解决方法,它似乎有点"笨拙",但它可以完成工作。 保存对我需要关闭SerialPort的引用的类在 MVVMCross 中注册为单例。 因此,我在App.Xaml.Mvx.cs类中添加了一个该单例接口类型的字段,然后在DoSetup()结束时,我对该类型调用Mvx.Resolve<>();并将该结果分配给我创建的字段。 然后,我有protected override void OnExit(ExitEventArgs e),我可以在场上调用Close()Dispose()方法。 这做了我需要它做的事情。

但是,我仍然对是否有更好,"更正确"的方法来使用MVVMCross进行操作感兴趣。

如果您关闭一个应用程序,则会调用 OnSuting 方法,在那里我会为 SerialPort 编写代码,因为您想触发当前 ViewModel 的方法,我只会在 App.xaml 中拥有表示当前 ViewModel 的对象.cs所以我可以在 OnSuspending() 中调用它的方法

我会这样做,但我不知道它是否更好或可以做你需要的。但也许它会给你一个想法。

相关内容

  • 没有找到相关文章

最新更新