Сохранение состояние 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));

}

Ответы (0 шт):