我有一些使用服务的 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
}
}
然后在我的其他ViewModel
s中,我将继承并覆盖OnViewsAttached
并OnViewsDetached
启动和停止服务。
现在在 MvvmCross v3 中,这两个Event
不再存在。据我了解,它们在 iOS 上也无法正常工作。v3 也有一个新的ViewModel
生命周期,它具有SavedState
和ReloadState
. 尽管据我所知,它SavedState
只会在ViewModel
被销毁时被调用,即使它没有显示,情况也可能并非如此。
至于检测关联的 View 是否正在显示,可以假设 View 在ShowViewModel
被调用时正在显示,并且在 View 中有一些Init
参数,但这里棘手的部分是检测 View 何时不再显示。关于如何实现这一目标的任何想法?