Ich habe ein Viewmodel, das INotifyPropertyChanged
implementiert. Auf diesem viewModel ist eine Eigenschaft namens SubGroupingView
. Diese Eigenschaft ist an das ausgewählte Element eines Kombinationsfelds gebunden. Wenn ich das Kombinationsfeld ändere, wird die Quelleigenschaft gut aktualisiert, aber wenn ich die Quelleigenschaft ändere oder wenn das Steuerelement initialisiert wird, spiegelt das combobox.selectedItem
NICHT, was in der Eigenschaft existiert.
Hier ist ein Code, um loszulegen:
Die Eigenschaft löst das PropertyChanged
-Ereignis aus und die TraceSource-Ausgabe zeigt mir, dass die Bindung es erkannt und den Wert übertragen hat, nur dass die Combobox es nicht reflektiert. Irgendwelche Ideen wären sehr willkommen!
BEARBEITEN:
Ausgabe von der Ablaufverfolgungsquelle ist dies:
Hier ist der Code für die Quelleigenschaft:
%Vor% Hinweis: ViewModelBase
implementiert INotifyPropertyChange
.
ANTWORT
Ich habe die Operatoren ==,! =,% Co_de% und GetHashCode()
überladen und jetzt funktioniert es gut. Vielen Dank für Ihre Hilfe!
Das von Ihrer SubGroupingView zurückgegebene Objekt muss einem der Objekte in der ComboBox.Items "gleich" sein (was bedeutet, dass es in Ihrer Columns-Auflistung sein muss). Wenn Sie also "a.Equals (b)" ausführen, müsste "true" zurückgegeben werden.
Wenn sie funktional gleich sind, aber im Vergleich nicht wahr sind, dann ist das dein Problem. Sie müssten entweder das gleiche Objekt zurückgeben oder die Equals-Methode (und möglicherweise die Operatoren == und! =) Überschreiben.
Wenn dies Ihr Problem ist, ist es das gleiche Problem wie in dieser Frage .
Ist IsSynchronizedWithCurrentItem
auf Ihrem ComboBox
vielleicht auf false
gesetzt? Du könntest versuchen, IsSynchronizedWithCurrentItem="True"
explizit zu setzen und zu sehen, ob das hilft.
Die Antwort von @CodeNaked ist richtig. Aber in meinem Fall löst das Überschreiben von Object.Equals StackOverflowException aus. Ich denke, die ganze Antwort besteht darin, ein vollständiges IEquatable zu implementieren, das heißt, seine Equals-Methode zu implementieren und die Methoden Object.Equals (Object) und Object.GetHashCode wie in dieses Beispiel (siehe das Ende des Abschnitts" Bemerkungen "-" Hinweise zu Implementierern "- und" Beispiele ").
Tags und Links wpf mvvm binding combobox selecteditem