2016-02-29 81 views
0

我有一個簡單的WPF窗體與一個組合框和一個按鈕。 ComboBox的ItemSource是一個包含目錄中文件名稱的字典。該按鈕用於通過使用「打開文件」對話框複製文件來添加新文件。我用結合Combobox - 更新並選擇新項目後,itemssource更改

代碼:

cmbClasses.ItemsSource = classList; 
cmbClasses.DisplayMemberPath = "Key"; 
cmbClasses.SelectedValuePath = "Value"; 

我想組合框增加新的文件,以字典後刷新項目,集是的SelectedItem。 我想這對令人耳目一新,但沒有奏效:

cmbClasses.Items.Clear(); 
cmbClasses.ItemsSource = classList; 
cmbClasses.DisplayMemberPath = "Key"; 
cmbClasses.SelectedValuePath = "Value"; 

我看見有幾個問題在這裏,但他們沒有幫助。任何人都知道我該怎麼做?

回答

1

首先,將ItemsSource數據綁定到可觀察的集合屬性或其他可以並將通知屬性已更改事件的東西。這應該在列表在幕後改變時更新組合框列表。將所選值綁定到另一個屬性並將該值動態設置爲您剛剛添加的值。 Here's這樣做的一種方式......快速谷歌搜索將會出現大量其他教程/示例。祝你好運,希望這有助於!

+0

當我看到你的評論後,我做了一個關於Observable Dictionary的挖掘,發現了一個[user-made class](http://drwpf.com/blog/2007/09/16/can-i-bind-my-itemscontrol -to-A-字典/)。你可能想看看! – cameloper

+1

是的 - 這會工作。 ObservableDictionary會在它發生變化時發出通知 - 確切地說你正在做什麼。還有ObservableList 等。你也可以自己做。我在我給你的鏈接中注意到,它明確地發送了它所通知的財產的名稱改變。在較新版本的.Net中,你可以使用MemberCallerName屬性來代替,這使我認爲代碼「更清潔」。 – Paul