从后面的代码中添加组合框项。 [WPF]
Posted
技术标签:
【中文标题】从后面的代码中添加组合框项。 [WPF]【英文标题】:Add comboBox items from code behind. [WPF] 【发布时间】:2015-10-12 06:29:07 【问题描述】:我从MSDN 获取了此代码。我试图做的是类似的,但使用一个列表而不是三个不同的字符串。这么说
List<string> strList = new List<string>();
strList.Add("Created with C#");
strList.Add("Item 2");
strList.Add("Item 3");
//MSDN CODE BELOW
cbox = new ComboBox();
cbox.Background = Brushes.LightBlue;
cboxitem = new ComboBoxItem();
cboxitem.Content = "Created with C#";
cbox.Items.Add(cboxitem);
cboxitem2 = new ComboBoxItem();
cboxitem2.Content = "Item 2";
cbox.Items.Add(cboxitem2);
cboxitem3 = new ComboBoxItem();
cboxitem3.Content = "Item 3";
cbox.Items.Add(cboxitem3);
cv2.Children.Add(cbox);
试图做 cbox.Items.Add(strList);还尝试了一个 forloop 循环遍历每个元素,但这也不起作用。有什么想法可以实现这一目标吗?
XAML:
<Grid x:Name="grid44" DataContext="StaticResource tBLPERMITSViewSource" HorizontalAlignment="Left" VerticalAlignment="Top" Width="409">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Content="SPR PACKET ASSIGMENT" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="0" VerticalAlignment="Center" FontWeight="Bold"/>
<ComboBox x:Name="sPR_ASSIGNEDComboBox" Grid.Column="1" DisplayMemberPath="SPR_ASSIGNED" HorizontalAlignment="Left" Height="Auto" Text="Binding SPR_ASSIGNED" ItemsSource="Binding Items" Margin="3,5,-114.35,5" Grid.Row="0" VerticalAlignment="Center" Width="238.35" Background="White" IsReadOnly="True" IsEditable="True" >
</ComboBox>
</Grid>
【问题讨论】:
您是否尝试过将组合框的 .ItemsSource 属性设置为字符串列表?例如 cbox.ItemsSource = new list您可以使用数据绑定。数据绑定允许您将列表中的动态数据绑定到组合框,并使其生成并填充您正在传递的内容。
Binding WPF Combobox to a Custom List
【讨论】:
【参考方案2】:以编程方式设置项目:
代码隐藏:
private void PopulateComboBox()
cBox.ItemsSource = new List<string> "Item1", "Item2", "Item3";
XAML:
<ComboBox Width="200" Height="30" x:Name="cBox" />
绑定到项目集合:
public class DummyClass
public int Value get; set;
public string DisplayValue get; set;
public ObservableCollection<DummyClass> DummyClassCollection
get
return new ObservableCollection<DummyClass>
new DummyClassDisplayValue = "Item1", Value = 1,
new DummyClassDisplayValue = "Item2", Value = 2,
new DummyClassDisplayValue = "Item3", Value = 3,
new DummyClassDisplayValue = "Item4", Value = 4,
;
XAML:
<ComboBox Width="200" Height="30" x:Name="cBox" ItemsSource="Binding DummyClassCollection" DisplayMemberPath="DisplayValue" />
【讨论】:
值得注意的是,一个列表可以用于集合,因为它在访问 get 时返回相同的数据,但我出于纯粹的习惯使用了一个可观察的集合,它内置集合更改的通知,因此组合框将更新它必然会更改的集合。【参考方案3】:如果您不想按照绑定/mvvm 模式执行此操作,只需执行以下操作即可:
foreach (var item in items)
_comboBox.Items.Add(item);
_comboBox.SelectedValuePath = "ID";
_comboBox.DisplayMemberPath = "Name";
以后可以这样访问:
var id = _comboBox.SelectedValue;
【讨论】:
【参考方案4】:我通过将我的字典 Ienumerable Keys 与 ComboBox ItemsSource 属性同步,然后在添加或删除项目时创建 Items 属性的 Refresh(),解决了在后面的代码中添加和删除 ComboBox 项目:
Dictionary<string,Object> dico=new Dictionary<string,Object>();
dico.Add("obj1",obj1);
dico.Add("obj2",obj2);
dico.Add("obj3",obj3);
...
ComboBox combobox=new ComboBox();
combobox.ItemsSource=dico.Keys;
string key=a_key;
Object obj=an_object;
// add //
if (dico.ContainsKey(key)==false)
dico.Add(key,obj);
combobox.Items.Refresh();
combobox.SelectedItem=key;
// remove //
if (dico.ContainsKey(key)==true)
dico.Remove(key);
combobox.Items.Refresh();
【讨论】:
以上是关于从后面的代码中添加组合框项。 [WPF]的主要内容,如果未能解决你的问题,请参考以下文章
带有按钮、组合框和文本框的 C# WinForms (.NET Framework) DataGridView:使用按钮添加新行以添加组合框项时出错