如何在 C# 中将 selectedValue 设置为 Controls.Combobox?

How to set selectedValue to Controls.Combobox in c#?

我有一个组合框,我发现我无法像这样设置 SelectedValue:

cmbA.SelectedValue = "asd"

所以我尝试这样做

cmbA.SelectedIndex = cmbA.FindString("asd");

基于How to set selected value from Combobox?

我意识到我的组合框是 System.Windows.Controls.ComboBox 而不是 System.Windows.Forms.ComboBox。

这意味着 FindString() 不可用。

基于 User Control vs. Windows Form 我知道表单是控件的容器,但我不明白为什么 Controls.ComboBox 没有实现 FindString()。

我是否必须编写自己的代码来完成 FindString() 为 Forms.ComboBox 所做的事情?

我不知道你想做什么,但我认为这样做会更容易

cmbA.Text = "String";

这样你就可以得到你选择的项目

另外,我找到了一篇可以帮助您的有趣文章: Difference between SelectedItem, SelectedValue and SelectedValuePath

WPF 组合框与 WinForms 的组合框不同。它们可以显示一组对象,而不仅仅是字符串。

假设我有

myComboBox.ItemsSource = new List<string> { "One", "Two", "Three" };

我可以使用下面的代码行来设置 SelectedItem

myComboBox.SelectedItem = "Two";

我们不仅限于这里的字符串。我也可以说我想将我的 ComboBox 绑定到 List<MyCustomClass>,我想将 ComboBox.SelectedItem 设置为 MyCustomClass 对象。

例如,

List<MyCustomClass> data = new List<MyCustomClass> 
{ 
    new MyCustomClass() { Id = 1, Name = "One" },
    new MyCustomClass() { Id = 2, Name = "Two" },
    new MyCustomClass() { Id = 3, Name = "Three" }
};
myComboBox.ItemsSource = data;
myComboBox.SelectedItem = data[0];

我也可以告诉 WPF 我想考虑 MyCustomClass 上的 Id 属性 作为标识 属性,并且我想设置 MyCombbox.SelectedValue = 2, 就会知道找到 .Id 属性 为 2 的 MyCustomClass 对象,并将其设置为选中。

myComboBox.SelectedValuePath = "Id";
myComboBox.SelectedValue = 2;

我什至可以使用

将显示文本设置为使用不同的 属性
myComboBox.DisplayMemberPath = "Name";

总而言之,WPF ComboBox 不仅仅可以处理字符串,而且由于扩展的功能,不需要 FindString。您最有可能寻找的是将 SelectedItem 设置为 ItemsSource 集合中存在的对象之一。

如果您不使用 ItemsSource,那么标准的 for-each 循环也应该有效

foreach(ComboBoxItem item in myComboBox.Items)
{
    if (item.Content == valueToFind)
        myComboBox.SelectedItem = item;
}