从代码后端添加ComboBox项目。[WPF]

8
我从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)。还尝试使用 for 循环遍历每个元素,但也不起作用。有什么想法可以实现这一点吗?

enter image description here

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<string>{"item1", "item2", "item3"}; - User92
我有一个列表,但它显示为空白。不过列表中的项目数量是正确的。不确定发生了什么事情。 - Gisiota
“it shows up blank” 是什么意思? - User92
这是一个标准的WPF组合框,还是您编辑了它的模板? - User92
嗯,好的,我在一个新的组合框上尝试了一下,似乎可以工作。所以肯定是有其他东西在干扰它。感谢您的帮助。但愿我能给你答案。请随意在下面写出来,我会检查一下。再次感谢!刚看到你最近的评论。是的,它来自数据集,所以我希望初始值从数据库中读取,然后提供一个可供选择的选项列表。我想我搞定了,谢谢。 - Gisiota
显示剩余3条评论
4个回答

9

通过编程设置项目:

后台代码:

    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 DummyClass{DisplayValue = "Item1", Value = 1},
                new DummyClass{DisplayValue = "Item2", Value = 2},
                new DummyClass{DisplayValue = "Item3", Value = 3},
                new DummyClass{DisplayValue = "Item4", Value = 4},
            };
        }
    }

XAML:

<ComboBox Width="200" Height="30"  x:Name="cBox" ItemsSource="{Binding DummyClassCollection}" DisplayMemberPath="DisplayValue" />

值得注意的是,由于每次访问 get 时都返回相同的数据,因此可以使用列表作为集合。但是出于纯粹的习惯,我使用了可观察集合,它具有内置的集合更改通知,因此绑定到它的下拉框将在集合更改时更新。 - User92

3
如果您不想遵循绑定/MVVM模式,那么只需按照以下简单步骤操作即可:
foreach (var item in items)
{
    _comboBox.Items.Add(item);
    _comboBox.SelectedValuePath = "ID";
    _comboBox.DisplayMemberPath = "Name";
}

可以稍后通过以下方式访问:
var id = _comboBox.SelectedValue;

0

我通过将我的字典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();
}

0

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