【发布时间】:2011-07-07 18:43:29
【问题描述】:
我有一个绑定到组合框 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?
【问题讨论】:
-
这段代码在哪个事件处理程序中运行?
-
啊,这是一个很好的评论,在我的程序的最后一个版本中,我有绑定语言 IAsync = true。
-
好吧,我通常不会自己编写 NotifyPropertyChanged,但您可以尝试使用 SelectionChanged 事件来记录所选项目。
-
IsAsync 是这里的问题。