Мой абстрактный ViewModelBase
базовый класс требует абстрактного метода RefreshDataCore (). Этот метод можно вызвать вручную, вызвав функцию Refresh () для экземпляра ViewModel или установив флаг IsDirty. Когда ViewModel.IsVisible имеет значение true и IsDirty установлен, также будет вызван Refresh ().
Таким образом, вы можете выполнять ленивое обновление данных всякий раз, когда ваши видовые модели становятся видимыми, а также вы можете вручную вызывать обновление, вызывая Refresh ().
Пример ниже. (Я упустил уведомления INPC для простоты)
public abstract class ViewModelBase
{
//Pull your data from the repository here
protected abstract void RefreshCore();
public void Refresh()
{
RefreshCore();
IsDirty = false;
}
private bool _isVisible = false;
//DataBind this to the visibility of element "hosting" your view model
public bool IsVisible
{
get { return _isVisible; }
set
{
if (_isVisible == value)
return;
_isVisible = value;
if (IsVisible && IsDirty)
Refresh();
}
}
private bool _isDirty = true;
public bool IsDirty
{
get { return _isDirty; }
set
{
if (_isDirty == value)
return;
_isDirty = value;
if (IsVisible && IsDirty)
Refresh();
}
}
}