【发布时间】:2017-07-03 22:38:57
【问题描述】:
我创建了绑定到视图模型相同属性的组合框和文本块
<ComboBox ItemsSource="{Binding LanguagesViewModel.Items}"
ItemTemplate="{StaticResource ComboBoxLanguageTemplate}"
SelectedItem="{Binding LanguagesViewModel.SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True"
/>
<TextBlock Text="{Binding LanguagesViewModel.SelectedItem.Language}" />
结果显示组合框中的选择项错误(始终是第一个)。文本块始终具有正确的值。当我在组合框中选择不同的值时,文本块会正确更新。如果我删除
IsSynchronizedWithCurrentItem="True"
然后组合框显示“空”值。语言的 SelectedItem 应该有正确的对象(通过调试)。
LanguageViewModel 包含可观察的语言模型集合。语言模型已经实现了覆盖 equals 和 gethascode(通过 resharper)并且有一个字符串属性 Language:
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?
-
LanguagesViewModel.SelectedItem = Show.LanguageLink;设置不同节目时触发。 -
问题是你设置选择项的方式错误,你需要将选择项设置为
LanguagesViewModel.Items列表之一。这就是为什么您的 ComboBox 无法正确显示它的原因,ComboBox 中没有此类项目并且无法选择它。 -
哦,这很好。谢谢
标签: c# wpf data-binding combobox