2011-08-11 8 views
3

私は文字列のリストを持っています。 私はコンボボックスに文字列のリストを入力したいと思います。どうすればいいですか? 私の試行と検索はすべて終わりです。リストを束縛するをコンボボックス

私が使用:

<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"); 

    }} 

EDIT: Combobox2items.ItemsSource = Combobox2items; が作品を追加することが、なぜのItemsSource = "{バインディングCombobox2items}" はないのですか?

+0

リストをcomboBox.ItemsSourceにバインドします。 –

+0

編集への応答:バインディングは、現在のDataContextで「Combobox2Items」というプロパティを使用するため、バインドが機能しません。しかし、私が見る限り、あなたは決してDataContextを設定しません。私はあなたが[この記事を読む](http://msdn.microsoft.com/en-us/library/ms752347.aspx) – dowhilefor

答えて

9

は、中2つの方法。

まず:

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

コードまたはXAML

に動作しますが、これはかなり静的である、それに直接アイテムを追加します。 2番目の方法では、動的リストを使用します。

たとえば、xamlにウィンドウとコンボボックスがあるとします。コンボボックスは、あなたがあなたのリストを作成し、これが正常に動作しますItemsSource

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

として設定することができます後ろにあなたのコードではx:Name="myCombobox"

を取得しますが、一つの問題があります。 ItemsSourceとして設定した後にリストを変更した場合、UIは最新の変更に追いつかなくなります。そのためには、ObservableCollectionを使用する必要があります。コレクションは、UIがリッスンする変更を通知できます。新しい項目を自動的にコンボボックスに追加します。

4

使用ObservableCollection<string>代わりList<string>の、それはあなた

ObservableCollection Class

WPFは INotifyCollectionChangedインターフェイスを実装するデータ収集のビルトイン 実装であるのObservableCollectionクラスを、提供するためにINotifyCollectionChangedを実装

+2

私は答えが十分ではないと思う。はい、ObservableCollectionを使用することをお勧めします。これは問題ではありません。ライブ変更が必要ない、または必要でない場合、リストを使用するのは完全にうまくいきます。しかし、問題はかなり曖昧です。私は正確に何 – dowhilefor

6

WPFのリストベースのコントロールには、 n ItemsSourceプロパティを使用して、リストの割り当てまたはバインドを行うことができます。コードでは:

comboBox1.ItemsSource = myList; 

...またはあなたのリストはあなたのウィンドウのためのDataContextであるオブジェクトのプロパティである場合:実際には、すべてのItemsControlにあなたはコンボボックスをpopuplateでき

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

: <コンボボックス名= "comboBox2" のItemsSource = "{Combobox2itemsバインディング}" /> 公共部分クラスのEditRule:ウィンドウ { 公共のObservableCollection Combobox2items {取得します。セット; } public EditRule() { InitializeComponent(); Combobox2items =新しいObservableCollection (); }} – Nahum

関連する問題