2011-01-04 2 views
0

У меня есть вопрос относительно MVVM для WP7. В моем приложении у меня есть тип datepicker или календарь, если хотите. Поэтому, выбрав день, вы можете отредактировать информацию в этот день, просмотрев ее и перейдя на другую страницу.странное поведение RaisePropertyChanged

Проблема в том, что когда я меняю какую-либо информацию и нажимаю кнопку «Назад», информация, которая была изменена, не обновлялась в привязках correspongind. Вот почему на событие navigatedto я вызываю публичный метод из моей виртуальной машины для этой страницы. Единственная цель этого метода (RefreshSelectedDay) - вызвать RaisePropertyChanged, чтобы привязанные текстовые поля на странице получили новую информацию. Однако ничего не происходит. Информация - это свойства actaully свойства 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, он не будет распространяться, потому что это одна и та же переменная, и только одно из его свойств изменилось. Было бы прекрасно, если кто-нибудь сможет объяснить, что происходит.

+0

Вы используете рамки для MVVM? Если да, то какой? –

+0

MVVM-Light для этого проекта. – Miro

ответ

0

«Проблема в том, что при изменении какой-либо информации и нажатии кнопки« Назад »информация, которая была изменена, не обновлялась в привязках correspongind».

Это означает для меня, что информация, которую якобы был изменен, не фактически изменили. Это также объясняет, почему youre RefreshSelectedDay тоже не работает.

Вы изменяете свойства на SelectedDay или создаете новый экземпляр, и это не задано?

Если вы изменяете свойства на SelectedDay, правильно ли этот класс активирует уведомления об изменении свойств?

Дополнительный код также поможет нам отлаживать.

+0

Ну, я проверил это несколько раз, и он изменился. В переменной selectedDay есть новая информация. MyDay - это модель в моем приложении, поэтому ее свойства не изменяют свойства, измененные уведомления. Однако SelectedDay используется как datacontext сетки, в которой есть некоторые текстовые блоки, связанные с свойствами SelectedDay. В этом случае RaisePropertyChanged должен уведомить, что файл datacontext изменен, и текстовые блоки должны быть перегруппированы. – Miro

+0

Это правда, они должны. без лишнего кода я ничего не вижу obvoius ... –

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