PropertyChanged ist in ViewModelBase immer null

7

Ich machte ein einfaches Beispiel, um das MVVM-Muster besser zu verstehen. Hier ist ein Link zur Beispiellösung, weil es schwierig ist, das ganze Problem zu erklären: Ссылка

Es gibt Employee model (mit Age property) und EmployeeViewModel , das Employee object enthält und seine Eigenschaft Age im folgenden Code ändert:

%Vor%

EmployeeViewModel wird von der Klasse ViewModelBase mit dem Standardcode INOtifyPropertyCHanged geerbt:

%Vor%

Ich versuche, das Alter des Mitarbeiters mit ICommand zu ändern:

%Vor%

Die Eigenschaft wurde geändert, aber der gebundene TextBLock ändert seinen Wert nicht. Ich habe überprüft und gesehen, dass NotifyPropertyChanged aufgerufen wird, aber PropertyChanged ist null . Ich habe auch sichergestellt, dass ich nur ein PeopleViewModel in meiner App habe. Also, warum ist das PropertyChanged null ?

BEARBEITEN: Hier ist der vollständige Code für ViewModelBase :

%Vor%

Es gibt PeopleViewModel , das ObservalbleCollectio n mit EmployeeViewModels enthält und als DataContext definiert ist. Die Werte von Eigenschaften werden geändert, aber die Änderungen werden nicht ohne erneutes Laden von Objekten angezeigt.

Hier ist die PeopleViewer.xaml, die die Bindung anzeigt:

%Vor%     
MyUserName 26.07.2011, 11:16
quelle

3 Antworten

17

In Ihrem Projekt implementieren Sie nicht tatsächlich INotifyPropertyChanged für Ihr Ansichtsmodell. Sie haben:

%Vor%

Aber das sollte sein:

%Vor%

Da Sie INotifyPropertyChange nicht implementieren, kann das WPF-Bindungssystem keinen Handler für Ihr PropertyChanged-Ereignis hinzufügen.

    
CodeNaked 26.07.2011, 11:27
quelle
1

Implementieren Sie die INotifyPropertyChanged-Schnittstelle in Ihrer ViewModelBase. Ссылка Sie haben ein PropertyChanged-Ereignis definiert, aber es ist die Schnittstelle, die wichtig ist.

    
Scott Munro 26.07.2011 11:29
quelle
1

Ich habe Ihre Bewerbung mit MVVM-Light anstelle Ihrer BaseViewModel-Implementierung geprüft und es hat so funktioniert wie es sollte.

Ich schlage vor, MVVM-Light wegen anderer Funktionen wie Messaging, Disposing und Blendability zu verwenden.

Sie können es einfach herunterladen und installieren, indem Sie NuGet .

verwenden

Wenn Sie INotifyPropertyChange trotzdem implementieren möchten, hier ist Code, der es tun wird:

%Vor%     
Behnam 26.07.2011 11:35
quelle

Tags und Links