2012-02-01 4 views
1

У меня есть приложение, которое содержит иерархию View/Viewmodels.Сохраняющиеся данные между изменениями MVVM View

ViewModelBase содержит два ViewModels

private AViewModel _aViewModel = new AViewModel(); 
private BViewModel _bViewModel = new AViewModel(); 

Мой XAML связывает DATACONTROL к

private ViewModelBase _currentView {get; set;} 
    public ViewModelBase CurrentView 
    { 
     get 
     { 
      return _currentView; 
     } 
     set 
     { 
      _currentView = value; 
      RaisePropertyChanged("CurrentView"); 
     } 
    } 

И решает, какой вид отображения на основе DataTemplates

<DataTemplate DataType="{x:Type vm:AViewModel}"> 
    <vw:AView /> 
</DataTemplate> 
<DataTemplate DataType="{x:Type vm:BViewModel}"> 
    <vw:BView /> 
</DataTemplate> 

Все это прекрасно работает, но я «Не знаю, как сохранить данные между« Просмотр изменений ». Скажем, например, что AViewModel содержит строку под названием «Тест» и имеет двустороннюю привязку в AView. Изменив представление с помощью CurrentView = _bviewmodel, мои данные не будут сохраняться, когда я вернусь к _aviewmodel. Каков наилучший способ убедиться, что данные остаются между изменениями вида, а не созданием новой пустой модели просмотра каждый раз. Мне нужно загрузить _currentView в _aViewModel, а затем обратно в _currentView

+0

Поскольку вы не распоряжаетесь 'AViewModel' и привязываетесь к строке под названием' Test' с двусторонней привязкой, данные должны быть сохранены уже. Возможно, добавьте точку останова в метод 'set'' AViewModel.Test' и убедитесь, что значение действительно установлено. Также добавьте точку останова, где вы меняете «CurrentView» и убедитесь, что 'AViewModel.Test' еще установлен. – Rachel

+0

согласны с rachel, если ваши _aViewModel и _bViewModel не выходят за рамки, данные останутся в памяти. – Anton

+0

Значение все еще существует, когда я добавляю точку останова в AViewmodel (Set Test), но не возвращается обратно в CurrentView в ViewModelBase - я могу получить значение для ViewModelBase посредником, возвращая значение обратно, но это снова будет потеряно в следующий раз Я установил «currentView» - я предполагаю, что каждый раз создаю новую модель представления, но не уверен, как просто передать ссылку. – Oli

ответ

0

Данные должны быть постоянными. Убедитесь, что вы не создаете новые ViewModels каждый раз, когда вы меняете CurrentView.

1

Если выложил мой AView XAML - Внутри было

<UserControl.DataContext> 
    <vm:AViewModel></vm:AViewModel> 
</UserControl.DataContext> 

Так оказывается, что я тупо создаю новый ViewModel внутри каждый раз Xaml я изменил мнение. Спасибо всем, кто указал мне в правильном направлении. Я удалил это из Xaml, и теперь все работает нормально.

+0

Я перешел на создание представлений из моих моделей ViewModels с использованием DataTemplates, но каждый раз, когда я менял текущую модель представления, вызывался бы безразмерный конструктор этой модели представления. Я не понимал, что это потому, что я устанавливал DataContext своих взглядов, как вы указали. Это ответ, который я искал для переполнения стека! –

Смежные вопросы