【问题标题】:C# ComboBox items from an array数组中的 C# ComboBox 项
【发布时间】:2018-02-14 17:36:51
【问题描述】:

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

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

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

现在我想让这些项目成为ComboBox 下拉列表中的选项。我发现的大部分内容都建议使用DataSourceDataBind,但实际上只有DataContext 可用。

我确定我缺少之前的一些步骤,但我对此仍然很陌生,所以我不确定它是什么。

【问题讨论】:

  • 您需要指定您正在使用的 UI 工具包。 WPF? WinForms?

标签: c# .net wpf combobox


【解决方案1】:

您找到的那些答案是针对 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>

【讨论】:

  • @YoushaAleayoub 如果您仔细阅读我的回答,您可能会意识到我在第一段中回答了数组和代码 sn-p。然后在第二段中,我解释了为什么您需要 Dictionary 而不是数组。它被接受是因为它确实回答了这个问题,并且超越了提供一个更好的替代方案和一个清晰的解释。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2012-11-25
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多