I erstellt Combobox und Textblock auf gleiche Eigenschaft von Viewmodel bindedC# ComboBox Bindung zeigt falsch ausgewählte Element
<ComboBox ItemsSource="{Binding LanguagesViewModel.Items}"
ItemTemplate="{StaticResource ComboBoxLanguageTemplate}"
SelectedItem="{Binding LanguagesViewModel.SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True"
/>
<TextBlock Text="{Binding LanguagesViewModel.SelectedItem.Language}" />
Ergebnis dieses mich nicht falsch SelectedItem in Combobox zeigt (immer der erste). Textblock hat immer den richtigen Wert. Wenn ich einen anderen Wert in der Combobox anwähle, wird der Textblock korrekt aktualisiert. Wenn ich entfernen
IsSynchronizedWithCurrentItem = "True"
dann Combobox zeigt "leeren" Wert. SelectedItem of Language sollte das richtige Objekt haben (durch Debuggen).
LanguageViewModel bestehen observablecollection des languagemodel. Sprachmodell hat überwiegendes gleich und gethascode (von ReSharper) implementiert und hat sich zu einem String-Attribut Sprache:
protected bool Equals(LanguageModel other)
{
return string.Equals(_language, other._language);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((LanguageModel) obj);
}
public override int GetHashCode()
{
return (_language != null ? _language.GetHashCode() : 0);
}
Was das Combobox ändern richtigen Artikel zeigt?
Wie stellen Sie/_LanguagesViewModel.SelectedItem_ bekommen? – Ron
'LanguagesViewModel.SelectedItem = Show.LanguageLink;' Wird ausgelöst, wenn eine andere Show eingestellt wird. – Crooker
Probleme sind, dass Sie das ausgewählte Objekt falsch setzen, Sie müssen das ausgewählte Element als eine der 'LanguagesViewModel.Items'-Liste festlegen. Deshalb können Sie ComboBox nicht korrekt anzeigen, es gibt kein solches Element in ComboBox und es kann es nicht auswählen. – Shakra