我有一些ViewModel,我使用的服务是相当带宽密集型的。但是,只有在查看应用程序中的特定视图时才需要此服务。检测ViewModel的关联视图是否显示/不显示
在MvvmCross vNext我用ViewUnRegistered
/ViewRegistered
事件时ViewModel
被证明检测,并有一个BaseViewModel
这看起来是这样的:
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
的I只想继承这并覆盖OnViewsAttached
和OnViewsDetached
以启动和停止该服务。
现在在MvvmCross v3中,这两个Event
不再存在。据我了解,他们也不能在iOS上正常工作。 v3也有一个新的ViewModel
生命周期,其中有SavedState
和ReloadState
。虽然据我了解SavedState
只有在ViewModel
被调用被销毁,即使它没有显示,情况可能并非如此。
至于检测是否显示相关的视图,可以假设一个视图显示ShowViewModel
被调用并且在视图中有一些Init
参数,但这里棘手的部分是检测视图何时不显示任何更多。任何想法如何实现这一目标?