2011-07-07 11 views
1

コンボボックスのItemSourceにバインドされた言語のリストがあります。時折、言語のリストが変更されることがあります。これが起こると、SelectedItemは消去されます。 Bindingが使用されているため、古い値を再割り当てすることは機能していないようです。コンボボックスは、コードでバインドされた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

これは良いコメントでした。私のプログラムの最後のバージョンでは、Binding Languages IAsync = trueでした。 – tofutim

答えて

0

問題は、言語でIsAsyncが真であることです。

0

選択したアイテムの代わりにテキストを使用する方が簡単です。代わりに

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

を使用するところで

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

、あなたは

 if (this.Languages.ContainKey(prevLanguage)) 
関連する問題