У меня вопрос по поводу MVVM для WP7. В моем приложении у меня есть вид даты или календарь, если хотите. Поэтому, выбрав день, можно отредактировать информацию об этом дне, нажав на нее и перейдя на другую страницу.
Проблема в том, что, когда я изменяю некоторую информацию и нажимаю кнопку «Назад», измененная информация не обновляется в привязках соответствующего формата. Вот почему в событии navigatedto я вызываю публичный метод из моей виртуальной машины для этой страницы. Единственная цель этого метода (RefreshSelectedDay) состоит в том, чтобы вызвать RaisePropertyChanged, чтобы связанные с текстом текстовые поля на странице получили новую информацию. Однако ничего не происходит. Информация является собственно свойствами свойства SelectedDay, которое является экземпляром класса MyDay.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ViewModel.ViewModelLocator.CalendarStatic.RefreshSelectedDay();
}
/// <summary>
/// I admit that this is by far the most stupid solution so far.
/// RaisePropertyChanged won't work if you haven't really changed the property.
/// That's why we set it to null and then turn it back.
/// Used for updating the day when returning from
/// the edit screen.
/// </summary>
public void RefreshSelectedDay()
{
MyDay w = selectedDay;
SelectedDay = null;
SelectedDay = w;
}
Мое решение, как вы видите, далеко не элегантно. Что происходит IMO, так это то, что если я просто вызову RaisePropertyChanged, он не будет распространяться, потому что это та же самая переменная, и только одно из ее свойств изменилось. Было бы прекрасно, если бы кто-то мог объяснить, что происходит.