2011-07-07 85 views
1

我有一個綁定到組合框ItemSource的語言列表。不時地,語言列表可能會改變。發生這種情況時,SelectedItem將被清除。由於使用綁定,因此重新分配舊值似乎不起作用。該組合框有綁定ItemSource更改時保留SelectedItem

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

NotifyPropertyChanged – tofutim

+0

啊,這是一個很好的評論,在我的程序的最新版本中,我有綁定語言IAsync = true。 – tofutim

回答

0

問題是IsAsync在語言中爲true。

0

如果您使用文本而不是選定的項目,會更容易。

 <ComboBox ItemSource = "{Binding Languages, IsAsync = true}" 
         Text = "{Binding SelectedLanguage}" 

而是採用

  if (this.Languages.Keys.Contains(prevLanguage)) 

順便說一句,你可以做

 if (this.Languages.ContainKey(prevLanguage))