Сохранение состояние ViewModel
У меня есть несколько ViewModel, которые отображаются в ContentPresenter
При переходе с одной страницы на другу, или на экземпляр самой себя же,ViewModel записывается в список _pageViewModelsHistory. После нажатия на кнопку Back, отрывается предыдущая VM, а текущая удаляется из списка.
Как сделать, чтобы в списке хранились ViewModel с сохраненным состоянием?
На данный момент, если я открыл ViewModel со свойством id = 6, а потом открыл экземпляр этой VM, куда передал новое значение id = 7 и нажимаю на кнопку Back, VM меняется, но значение id остается прежним.
public MainViewModel()
{
PageViewModels = new List<IPageViewModel>
{
new Page1ViewModel(this),
new Page2ViewModel(this),
new Page3ViewModel(0)
};
PageViewModelsHistory = new List<IPageViewModel> { new Page1ViewModel(this) };
ButtonCommand = new RelayCommand(o => BackViewModel());
ButtonCommandHistoryView = new RelayCommand(o => DebugHistory());
SelectedItemChangedCommand = new CommandParameter(selectedItem);
}
private void selectedItem(object obj)
{
Debug.WriteLine("Выбор элемента в меню");
AddHistory((IPageViewModel)obj);
Debug.WriteLine("Выбран: " + obj.ToString());
DebugHistory();
}
private void BackViewModel()
{
Debug.WriteLine("Назад");
if (_selectedPageViewModelHistoryIndex != 0)
{
_pageViewModelsHistory.RemoveAt(_selectedPageViewModelHistoryIndex);
_selectedPageViewModelHistoryIndex -= 1;
OnPropertyChanged(nameof(Title));
OnPropertyChanged(nameof(id));
}
_selectedPageViewModelHistory = _pageViewModelsHistory[_selectedPageViewModelHistoryIndex];
SelectedPageViewModel = _selectedPageViewModelHistory;
_selectedPageViewModel = _selectedPageViewModelHistory;
DebugHistory();
}
public IList<IPageViewModel> PageViewModels
{
get => _pageViewModels;
set
{
_pageViewModels = value;
_selectedPageViewModel = _pageViewModels[0];
OnPropertyChanged();
}
}
public IPageViewModel SelectedPageViewModel
{
get => _selectedPageViewModel;
set
{
_selectedPageViewModel = value;
OnPropertyChanged();
OnPropertyChanged(nameof(Title));
OnPropertyChanged(nameof(id));
}
}
private void DebugHistory()
{
Debug.Indent();
Debug.WriteLine("\n\n\n\n\n\nСписок моделей: ");
foreach (var pageViewModelHistory in _pageViewModelsHistory)
{
Debug.WriteLine(pageViewModelHistory);
}
Debug.WriteLine("\nТекущая: " + SelectedPageViewModel);
Debug.Unindent();
}
public void AddHistory(IPageViewModel value)
{
_pageViewModelsHistory.Add(value);
_selectedPageViewModelHistoryIndex = _pageViewModelsHistory.Count - 1;
_selectedPageViewModelHistory = _pageViewModelsHistory[_selectedPageViewModelHistoryIndex];
}
#endregion
public IList<IPageViewModel> PageViewModelsHistory
{
get => _pageViewModelsHistory;
set
{
_pageViewModelsHistory = value;
//_selectedPageViewModelHistory = _pageViewModelsHistory[0];
OnPropertyChanged();
}
}
public void Navigate<T>(int t)
{
AddHistory(_pageViewModels.First(vm => vm is T));
DebugHistory();
SelectedPageViewModel = _pageViewModels.First(vm => vm is T);
Debug.WriteLine("Переданное число: " + (t).ToString());
OnPropertyChanged(nameof(id));
}