2011-08-11 40 views
3

我有一個字符串列表。 我想用一串字符串填充組合框。我該怎麼做呢? 我所有的嘗試和搜索都是死衚衕。將列表<string>綁定到組合框

我用:

<ComboBox Name="comboBox2" ItemsSource="{Binding Combobox2items}" /> 
public partial class EditRule : Window 
{ 
    public ObservableCollection<string> Combobox2items { get; set; } 

    public EditRule() 
    { 
     InitializeComponent(); 
     Combobox2items = new ObservableCollection<string>(); 
    Combobox2items.Add("DFd"); 

    }} 

編輯: 加入Combobox2items.ItemsSource = Combobox2items; 作品,但爲什麼的ItemsSource = 「{結合Combobox2items}」 不?

+0

將您的列表綁定到comboBox.ItemsSource –

+0

回答您的編輯:綁定不起作用,因爲Binding在您當前的DataContext中使用屬性「Combobox2Items」。但據我所知,你從來沒有設置任何DataContext。我建議你閱讀[這篇文章](http://msdn.microsoft.com/en-us/library/ms752347.aspx) – dowhilefor

回答

9

你可以這樣就把一個組合框,其實每一個ItemsControl的,在2種方式。

第一:直接添加項目,這在代碼或XAML中

<ComboBox> 
    <ComboBoxItem Name="Item1" /> 
    <ComboBoxItem Name="Item2" /> 
</ComboBox> 

工作,但這個是相當靜態的。 第二種方法使用動態列表。

作爲示例,我們假設您在xaml中有一個窗口和一個組合框。組合框獲得x:Name="myCombobox"

在後面的代碼,你可以創建列表並將其設置爲ItemsSource

List<string> myItemsCollection = new List<string>(); 
public Window1() 
{ 
    InitializeComponent(); 
    myItemsCollection.Add("Item1"); 
    myCombobox.ItemsSource = myItemsCollection; 
} 

這工作得很好,但有一個問題。如果在將其設置爲ItemsSource後更改List,UI將無法趕上最新的更改。因此,爲了使這項工作順利進行,您現在需要使用ObservableCollection這個集合可以通知用戶界面將會聽到的任何更改。並自動將新項目添加到組合框。

4

使用ObservableCollection<string>,而不是List<string>,它實現INotifyCollectionChanged

ObservableCollection Class

WPF提供的ObservableCollection類,它是一個內置的 實現數據採集實現了 INotifyCollectionChanged接口

+2

我認爲答案是不夠的。雖然是的,但使用ObservableCollection是一種好習慣。這不是問題。如果不需要或不需要實時更改,那麼使用List就非常好。但問題很模糊。 – dowhilefor

6

WPF中的任何基於列表的控件都有ItemsSource您可以分配或綁定列表的屬性。在代碼:

comboBox1.ItemsSource = myList; 

...或者,如果您的列表是一個對象的屬性,它是在DataContext你的窗口:

<ComboBox ItemsSource="{Binding MyList}" /> 
+0

這正是我所做的: <組合框名稱= 「comboBox2」 的ItemsSource = 「{結合Combobox2items}」/> 公共部分類EditRule:窗口 { 公衆的ObservableCollection Combobox2items {獲得;組; } public EditRule() { InitializeComponent(); Combobox2items = new ObservableCollection (); }} – Nahum