我想做的是在不再需要ViewModel时取消订阅事件。我尝试实现IDisposable,但没有人调用Dispose(),而不是Xamarin.Forms或Prism.Forms。
我们有一个使用Xamarin.Forms创建的应用程序。我们使用Prism.Forms进行MVVM。导航到新页面(堆叠时)时,Prism.Forms将ViewModel连接到页面。向后导航(从堆栈弹出)时,ViewModel会在一段时间后变为GarbageCollected。
但是问题是,在某个时间点上,我们有几个相同类型的ViewModel,它们都订阅了未绑定到View的事件。当事件触发时,所有这些ViewModel都会开始执行其操作。因此,我正在寻找一种不再需要订阅的方式来取消订阅。
有没有人有办法解决吗?
您可以确保Dispose()
在称为OnDisappearing()
视图的情况下,如果你想确保视图模型不超过视图内存不再出现。
最好只关心事件的订阅和退订,然后在OnAppearing()
和中进行操作OnDisappearing()
。在这种情况下,一旦视图不可见,您将确保视图模型上不存在任何事件处理程序。
谢谢,我会尝试的。请注意,在调用诸如Dailer屏幕(在Android上)之类的意图时也会触发Disappearing()。因此,我将不得不再次订阅Appearing()中的事件。