当我的 MVVMCross WPF 应用程序退出时,即单击红色 X 时,我需要显式关闭并释放一个SerialPort
对象。 为此,我需要调用当前视图模型的方法。
我一直在尝试通过遵循 MVVMCross n=42 视频并在实现 IKillable
的 abstract 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() 中调用它的方法
我会这样做,但我不知道它是否更好或可以做你需要的。但也许它会给你一个想法。