我有一些使用服务的 ViewModel,这非常占用带宽。但是,只有在查看应用程序中的特定视图时才需要此服务。
在 MvvmCross vNext 中,我使用了ViewUnRegistered/ViewRegistered事件来检测 a 何时ViewModel显示,并且 aBaseViewModel看起来像这样:
public class BaseViewModel
: MvxViewModel
, IMvxServiceConsumer
{
public BaseViewModel()
{
ViewUnRegistered += (s, e) =>
{
if (!HasViews)
{
OnViewsDetached();
}
};
ViewRegistered += (s, e) =>
{
if (HasViews)
{
OnViewsAttached();
}
};
}
public virtual void OnViewsAttached()
{
// nothing to do here
}
public virtual void OnViewsDetached()
{
// nothing to do in this base class
}
}
然后在我的其他ViewModels中,我将继承并覆盖OnViewsAttached并OnViewsDetached启动和停止服务。
现在在 MvvmCross v3 中,这两个Event不再存在。据我了解,它们在 iOS 上也无法正常工作。v3 也有一个新的ViewModel生命周期,它具有SavedState和ReloadState. 尽管据我所知,它SavedState只会在ViewModel被销毁时被调用,即使它没有显示,情况也可能并非如此。
至于检测关联的 View 是否正在显示,可以假设 View 在ShowViewModel被调用时正在显示,并且在 View 中有一些Init参数,但这里棘手的部分是检测 View 何时不再显示。关于如何实现这一目标的任何想法?