を示す結合私はコンボボックスとテキストブロックを作成したのviewmodelの同じプロパティにバインドさこのC#ComboBoxの間違った選択した項目
<ComboBox ItemsSource="{Binding LanguagesViewModel.Items}"
ItemTemplate="{StaticResource ComboBoxLanguageTemplate}"
SelectedItem="{Binding LanguagesViewModel.SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True"
/>
<TextBlock Text="{Binding LanguagesViewModel.SelectedItem.Language}" />
結果は私のコンボボックスで間違ったのSelectedItem(常に最初のもの)を示しています。テキストブロックは常に正しい値を持っています。コンボボックスで別の値を選択すると、textblockが適切に更新されます。私は
IsSynchronizedWithCurrentItem = "True" を
を削除した場合、コンボボックスには、 "空" の値を示しています。言語のSelectedItemは(デバッグによって)正しいオブジェクトを持つ必要があります。
LanguageViewModelは、言語モデルのobsertvablecollectionです。言語モデルは、(ReSharperので)オーバーライドイコールとgethascodeを実施し、1つの文字列の属性の言語を持っていました:
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);
}
そのコンボボックスを変更するにはどのような権利の項目を示していますか?
どのように_LanguagesViewModel.SelectedItem_を取得/設定するのですか? – Ron
'LanguagesViewModel.SelectedItem = Show.LanguageLink;'異なるショーを設定するときにトリガーされます。 – Crooker
問題は、選択した項目を間違った方法で設定した場合、選択した項目を 'LanguagesViewModel.Items'リストの1つとして設定する必要があります。そのため、ComboBoxは正しく表示できず、ComboBoxにそのような項目がなく、選択できません。 – Shakra