Bindung an ViewModel.SubClass.Property (Untereigenschaft)

8

Nehmen wir an, ich habe einen Bereich auf meinem Bildschirm, in dem "aktueller Datensatz" bearbeitet wird. Also hat mein Ansichtsmodell eine Klasse mit allen aktuell bearbeiteten Eigenschaften wie:

%Vor%

und wir fügen diese Klasse dem View-Modell hinzu:

%Vor%

Wie kann ich in meiner Ansicht an die Notes-Eigenschaft von CurrentRecord binden? Ich habe es versucht:

%Vor%

Dies funktioniert jedoch nicht. Ich habe auch versucht, DataContext des umgebenden StackPanel zu setzen:

%Vor%

Danach probierte ich in meiner Textbox {Binding Notes} und {Binding Path = Notes}, aber keiner von diesen scheint zu funktionieren.

Vielleicht sollte oben wirklich funktionieren und ich mache etwas woanders?

Aktualisieren

Dies geschieht in einem Benutzersteuerelement. Dieses Benutzersteuerelement verfügt über ein separates Ansichtsmodell aus dem übergeordneten Fenster.

%Vor%

Ich sehe auch einen verbindlichen Fehler: 'Notizen' Eigenschaft nicht gefunden auf 'Objekt' '' MainViewModel '

Dieses Ansichtsmodell wird im Hauptfenster festgelegt.

um zu überprüfen, ob ich die richtige ViewModel-Bindung habe, habe ich diese Eigenschaft direkt im ViewModel hinzugefügt:

%Vor%

und entsprechender Textblock in der Ansicht:

%Vor%

Dies funktioniert wie erwartet.

Großer Erfolg

Dank Ryan konnte ich das Problem finden. Es war nicht in der Eigenschaft selbst, sondern in der Art, wie CurrentRecord eingestellt wurde. In meinem Setter rufe ich den INotifyPropertyChange-Handler auf, der aber den alten Namen der Eigenschaft enthält. Daher erhielt die Ansicht keine CurrentRecord-Benachrichtigung, daher war die Notes-Benachrichtigung nicht ausreichend.

Zusammenfassend ist diese Notation korrekt: {Binding Path = CurrentRecord.Notes}

    
Sonic Soul 23.07.2012, 20:00
quelle

2 Antworten

8

Das obige sollte funktionieren, {Binding Path = CurrentRecord.Notes} ist richtig. Können Sie überprüfen, ob Ihr Datacontext auf Ihr Viewmodel gesetzt ist?

Überprüfen Sie auch, ob Ihr Viewmodel INotifyPropertyChanged implementiert.

bearbeiten: Ich habe gerade ein Beispielprojekt erstellt, um das neu zu erstellen. Keine Notwendigkeit, INotifyPropertyChanged zu implementieren, es funktioniert nur, wenn der Datenkontext auf die VM festgelegt ist.

    
cguedel 23.07.2012, 20:11
quelle
1

Stellen Sie sicher, dass Ihre CurrentRecord-Eigenschaft 1) festgelegt ist und 2) die UI-Schicht benachrichtigt, dass eine Änderung aufgetreten ist.

    
Thelonias 23.07.2012 23:01
quelle

Tags und Links