绑定ItemSsource更改时保留SelectedItem

时间:2011-07-07 18:43:30

标签: c# wpf binding

我有一个绑定到组合框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被设置?

2 个答案:

答案 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))