将List <string>绑定到组合框

Nah*_*hum 3 c# wpf

我有一个字符串列表.我想用一个字符串列表填充一个组合框.我该怎么做呢?我所有的尝试和搜索都是死路一条.

我用了:

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

    }}
Run Code Online (Sandbox Code Playgroud)

编辑:添加Combobox2items.ItemsSource = Combobox2items; 作品,但为什么ItemsSource ="{Binding Combobox2items}"不?

dow*_*for 9

您可以通过2种方式填充ComboBox,实际上是每个ItemsControl.

第一步:直接添加项目,它在Code或Xaml中工作

<ComboBox>
    <ComboBoxItem Name="Item1" />
    <ComboBoxItem Name="Item2" />
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

但这是相当静态的.第二种方法使用动态列表.

举个例子,假设你的xaml中有一个窗口和一个组合框.Combobox得到了x:Name="myCombobox"

在您的代码中,您可以创建列表并将其设置为 ItemsSource

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

这很好,但有一个问题.如果在将其设置为ItemsSource后更改List,则UI将无法跟上最新的更改.因此,为了使这项工作,您需要使用ObservableCollection现在集合可以通知任何更改,UI将听取.并自动将新项添加到组合框中.


Mat*_*ton 6

WPF中的任何基于列表的控件都有一个ItemsSource可以为其分配或绑定列表的属性.在代码中:

comboBox1.ItemsSource = myList;
Run Code Online (Sandbox Code Playgroud)

...或者如果您的列表是对象的属性,该对象是您的Window的DataContext:

<ComboBox ItemsSource="{Binding MyList}" />
Run Code Online (Sandbox Code Playgroud)


sll*_*sll 5

使用ObservableCollection<string>而不是List<string>,它会INotifyCollectionChanged为您实现

ObservableCollection 类

WPF 提供了 ObservableCollection 类,该类是实现 INotifyCollectionChanged 接口的数据集合的内置实现

  • 我认为答案是不够的。虽然是的,但使用 ObservableCollection 是一种很好的做法。这不是问题。如果不需要或不需要实时更改,则使用列表完全没问题。但是这个问题很模糊。 (2认同)