2011-01-04 14 views
0

Ich habe eine Frage zu MVVM für WP7. In meiner Bewerbung habe ich eine Art von Datumsauswahl oder einen Kalender, wenn du willst. Nachdem Sie einen Tag ausgewählt haben, können Sie die Informationen zu diesem Tag bearbeiten, indem Sie darauf klicken und auf eine andere Seite gelangen.seltsam RaisePropertyChanged Verhalten

Das Problem ist, dass, wenn ich einige Informationen ändere und auf die Zurück-Schaltfläche klickte, die Information, die geändert wurde, in den Correspongind-Bindungen nicht aktualisiert wurde. Aus diesem Grund rufe ich auf dem navigatedto-Ereignis eine öffentliche Methode von meiner VM für diese Seite auf. Der einzige Zweck dieser Methode (RefreshSelectedDay) besteht darin, RaisePropertyChanged aufzurufen, damit die verknüpften Textfelder auf der Seite die neuen Informationen erhalten. Es passiert jedoch nichts. Die Info ist eine Eigenschaft der SelectedDay-Eigenschaft, die eine Instanz der MyDay-Klasse ist.

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; 
    } 

Meine Lösung, wie Sie sehen können, ist weit davon entfernt, elegant zu sein. Was passiert IMO ist, dass, wenn ich nur die RaisePropertyChanged aufrufen wird es nicht propagieren, weil es die gleiche Variable ist und nur eine seiner Eigenschaften hat sich geändert. Es wäre schön, wenn jemand erklären könnte, was passiert.

+0

Verwenden Sie ein Framework für MVVM? Wenn ja, welche? –

+0

MVVM-Light für dieses Projekt. – Miro

Antwort

0

"Das Problem ist, dass, wenn ich einige Informationen ändere und auf die Zurück-Schaltfläche klicke, die Informationen, die geändert wurden, nicht in den Correspongind-Bindungen aktualisiert wurden."

Das ist für mich bedeutet, dass die Informationen, die angeblich geändert wurde, war nicht tatsächlich verändert. Das würde auch erklären, warum youre RefreshSelectedDay auch nicht zu funktionieren scheint.

Ändern Sie Eigenschaften auf SelectedDay, oder erstellen Sie eine neue Instanz, und das wird nicht festgelegt?

Wenn Sie Eigenschaften auf SelectedDay ändern, löst diese Klasse ordnungsgemäß Benachrichtigungen über die Änderung von Eigenschaften aus?

Mehr Code würde uns auch helfen zu debuggen.

+0

Nun, ich habe das mehrmals überprüft und es wird modifiziert. Die Variable "selectedDay" enthält die neuen Informationen. MyDay ist ein Modell in meiner Anwendung, so dass seine Eigenschaften Benachrichtigungen über geänderte Eigenschaften nicht auslösen. SelectedDay wird jedoch als Datenkontext eines Rasters verwendet, in dem einige Textblöcke an die Eigenschaften von SelectedDay gebunden sind. In diesem Fall sollte RaisePropertyChanged mitteilen, dass der Datenkontext geändert wurde und die Textblöcke erneut binden sollten. – Miro

+0

das ist wahr, sie sollten. ohne mehr Code sehe ich nichts obvoius ... –