来自数组的C#ComboBox项

时间:2018-02-14 17:36:51

标签: c# .net wpf combobox

我已经搜索了一段时间的答案,但似乎没有一个完全符合我的问题。

我有一个窗口,我在其中创建了ComboBox。然后在我的代码中,我创建了一个数组:

public string[] myList = new[] { "Item 1", "Item 2" };

现在我想在ComboBox下拉列表中选择这些项目。我发现的大多数内容建议使用DataSourceDataBind,但实际上只有DataContext可用。

我确信之前有一些步骤我不知道了,但我还是很新,所以我不确定它是什么。

2 个答案:

答案 0 :(得分:3)

您找到的答案是针对Winforms的,您似乎正在使用WPF。它们都具有ComboBox控件,但它们实际上是具有不同属性的完全不同的控件。试试这个(假设你称之为ComboBox1):

ComboBox1.ItemsSource = myList;

但是,您通常需要商品的ID,以便在用户选择商品时使用它们。为此,您需要将ComboBox绑定到Dictionary而不是List,如下所示:

var data = new Dictionary<int, string>{
           {100, "Eggplant"},
           {102, "Onion"},
           {300, "Potato"},
           {105, "Tomato"},
           {200, "Zuccini"}
};
ComboBox1.ItemsSource = data;
ComboBox1.DisplayMemberPath = "Value";
ComboBox1.SelectedValuePath = "Key";

现在,当用户选择“洋葱”时,您将使用以下方式获得102:

int selected = (int)ComboBox1.SelectedValue;

注意:XAML中的ComboBox1必须没有项目,否则会出错。

如果您希望将项目保留在XAML中而不是代码隐藏中,则不会与SelectedValuePath属性等效,但您可以使用Tag属性对其进行模拟,如下所示:

<ComboBox x:Name="ComboBox1" SelectedValuePath="Tag">
    <ComboBoxItem Content="Eggplant" Tag="100" />
    <ComboBoxItem Content="Onion" Tag="102" />
    <ComboBoxItem Content="Potato" Tag="300" />
    <ComboBoxItem Content="Tomato" Tag="105" />
    <ComboBoxItem Content="Zuccini" Tag="200" />
</ComboBox>

答案 1 :(得分:0)

尝试将ID映射到字符串列表的每个成员。它会起作用。