我有一个字符串列表。 我想用一个字符串列表填充一个组合框。我该怎么做呢? 我所有的尝试和搜索都是死路一条。
我用过:
<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}”不是?
答案 0 :(得分:9)
你可以用2种方式填充ComboBox,实际上是每个ItemsControl。
首先:直接添加项目,它在Code或Xaml中运行
<ComboBox>
<ComboBoxItem Name="Item1" />
<ComboBoxItem Name="Item2" />
</ComboBox>
但这是相当静态的。 第二种方法使用动态列表。
举个例子,假设你的xaml中有一个窗口和一个组合框。 Combobox获得x:Name="myCombobox"
在您的代码中,您可以创建列表并将其设置为ItemsSource
List<string> myItemsCollection = new List<string>();
public Window1()
{
InitializeComponent();
myItemsCollection.Add("Item1");
myCombobox.ItemsSource = myItemsCollection;
}
这很好,但有一个问题。如果在将其设置为ItemsSource后更改List,则UI将无法跟上最新的更改。因此,为了使这项工作,您需要使用ObservableCollection
现在集合可以通知任何更改,UI将听取。并自动将新项添加到组合框中。
答案 1 :(得分:6)
WPF中任何基于列表的控件都有一个ItemsSource
属性,您可以将该列表分配或绑定到该属性。在代码中:
comboBox1.ItemsSource = myList;
...或者如果您的列表是对象的属性,该对象是您的Window的DataContext:
<ComboBox ItemsSource="{Binding MyList}" />
答案 2 :(得分:4)
使用ObservableCollection<string>
代替List<string>
,它为您实施INotifyCollectionChanged
WPF提供了ObservableCollection类,它是一个内置的 实现实现的数据集合的实现 INotifyCollectionChanged接口