2012-11-25 2 views
5

У меня есть MainPageViewModel с элементами (ObservableCollection). На этой странице у меня также есть кнопка, которая добавляет новые элементы в элементы.Tombstoning in Caliburn Micro

public class MainPageViewModel : Screen { 
    private DateTime StartActivity = DateTime.MinValue; 

    public ObservableCollection<ActivityViewModel> Items { get; set; } 

    public MainPageViewModel(INavigationService navigationService) { 
    this.Items = new ObservableCollection<ActivityViewModel>(); 
    } 

    public void AddActivity(string activityName) { 
    if (this.Items.Count == 0) { 
     this.Items.Add(new ActivityViewModel() { 
     Activity = activityName, 
     Duration = 0 
     }); 

     StartActivity = DateTime.Now; 
     } 
    else { 
     this.Items[this.Items.Count - 1].Duration = 10; 
     this.Items.Add(new ActivityViewModel() { 
     Activity = activityName, 
     Duration = 0 
     }); 

     StartActivity = DateTime.Now; 
    } 
    } 
} 

Добавление новых изделий прекрасно работает.

Но данные из элементов не восстанавливаются, когда приложение активируется после надгробного клонирования. Попробуйте создать StorageHandler для моей модели ViewModel. Не помогает. Что я делаю неправильно?

public class MainPageViewModelStorage : StorageHandler<MainPageViewModel> { 
    public override void Configure() { 
    Property(x => x.Items) 
     .InAppSettings() 
     .RestoreAfterActivation(); 
    } 
} 

Также попробуйте добавить [SurviveTombstone] для класса и свойства, но Visual Studio не знает этого атрибута.

public class ActivityViewModel : PropertyChangedBase { 
    private string _activity; 
    public string Activity { 
    get { 
     return _activity; 
    } 
    set { 
     if (value != _activity) { 
     _activity = value; 
     NotifyOfPropertyChange(() => Activity); 
     } 
    } 
    } 

    private double _duration; 
    public double Duration { 
    get { 
     return _duration; 
    } 
    set { 
     if (value != _duration) { 
     _duration = value; 
     NotifyOfPropertyChange(() => Duration); 
     } 
    } 
    } 
} 

ответ

4
  1. Вы должны хранить не InAppSettings но InPhoneState.
  2. Проверьте с точкой останова, если вызван метод Configure. Если нет - что-то не так с вашим загрузчиком. Возможно PhoneContainer.RegisterPhoneServices() отсутствует
  3. Включить исключение при первой возможности исключения в Visual Studio (Ctrl + Alt + E и установить флажок напротив исключений CLR). Вероятно, ваша модель просмотра не может быть десериализована должным образом.
Смежные вопросы