将List<string>绑定到ComboBox

4

我有一个字符串列表。 我想用一个字符串列表填充一个组合框。我该怎么做? 我所有的尝试和搜索都无果。

我使用了:

<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="{Binding Combobox2items}"不能解决呢?


将您的列表绑定到comboBox.ItemsSource。 - Stephan Bauer
回答您的编辑:绑定不起作用,因为绑定在您当前的DataContext中使用属性“Combobox2Items”。但是据我所见,您从未设置任何DataContext。我建议您阅读此文章。 - dowhilefor
3个回答

9
你可以以两种方式填充ComboBox,实际上每个ItemsControl都可以。第一种:直接在代码或Xaml中添加Items。
<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;
}

这样做没问题,但是存在一个问题。如果在将List设置为ItemsSource后更改它,UI将无法跟上最新的更改。因此,为了使其正常工作,您需要使用ObservableCollection,现在集合可以通知任何更改,UI将监听并自动将新项目添加到组合框中。


6

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

comboBox1.ItemsSource = myList;

如果您的列表是窗口的DataContext对象上的属性:

或者

如果您的列表是一个对象的属性,该对象是窗口的DataContext:

相关的IT技术涉及数据绑定和WPF编程。
<ComboBox ItemsSource="{Binding MyList}" />

这就是我所做的: <ComboBox Name="comboBox2" ItemsSource="{Binding Combobox2items}" /> public partial class EditRule : Window { public ObservableCollection<string> Combobox2items { get; set; } public EditRule() { InitializeComponent(); Combobox2items = new ObservableCollection<string>(); } } - Nahum

5
使用ObservableCollection<string>代替List<string>,它已经为你实现了INotifyCollectionChanged接口。 ObservableCollection类 WPF提供了ObservableCollection类,它是一个内置的数据集合实现,实现了INotifyCollectionChanged接口。

2
我认为答案不够充分。虽然使用ObservableCollection是一个好的实践,但这并不是问题所在。如果不需要或不想要实时更改,使用List是完全可以的。但问题本身相当模糊。 - dowhilefor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接