我有一个绑定到组合框ItemSource的语言列表。语言列表可能会不时发生变化。发生这种情况时,SelectedItem将被清除。因为使用了Binding,所以重新分配旧值似乎不起作用。组合框有
ItemSource = "{Binding Languages, IsAsync = true}"
SelectedItem = "{Binding SelectedLanguage}"
在代码中,我(粗略地)
var prevLanguage = this.SelectedLanguage;
this.Languages = newLanguages;
if (this.Languages.Keys.Contains(prevLanguage))
this.SelectedLanguage = prevLanguage;
else
this.SelectedLanguage = myDefaultLanguage;
这显然发生得太快,因为组合框选定的项目仍然是空白。它不会设置为prevLanguage或myDefaultLanguage。如何在ItemSource上完成绑定后确保SelectedLanguage被设置?
答案 0 :(得分:0)
问题是语言中的IsAsync为真。
答案 1 :(得分:0)
如果您使用文本而不是选定项目会更容易。
<ComboBox ItemSource = "{Binding Languages, IsAsync = true}"
Text = "{Binding SelectedLanguage}"
顺便说一句,而不是使用
if (this.Languages.Keys.Contains(prevLanguage))
你可以做到
if (this.Languages.ContainKey(prevLanguage))