我有一些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
參數,但這裏棘手的部分是檢測視圖何時不顯示任何更多。任何想法如何實現這一目標?