C# 按字符串选择组合框

C# 按字符串选择组合框,c#,wpf,combobox,C#,Wpf,Combobox,我有一个名为comType_1的组合框,其中包含某些可选字符串。我有一个变量k.Type_1,它包含所需的字符串 例如: k.Type_1包含“Test”comType_1包含一个名为“测试”的项目。如何选择此项目 我尝试过多种方法,但没有一种有效: comType_1.SelectedValue = k.Type_1; comType_1.SelectedValue = comType_1.Items.IndexOf(k.Type_1); comType_1.SelectedItem = co

我有一个名为
comType_1
的组合框,其中包含某些可选字符串。我有一个变量
k.Type_1
,它包含所需的字符串

例如:

k.Type_1
包含“Test”
comType_1
包含一个名为“测试”的项目。如何选择此项目

我尝试过多种方法,但没有一种有效:

comType_1.SelectedValue = k.Type_1;
comType_1.SelectedValue = comType_1.Items.IndexOf(k.Type_1);
comType_1.SelectedItem = comType_1.Items.Equals(k.Type_1);

我正在使用Visual Studio 2015社区,此应用程序是一个WPF应用程序。

首先,您需要更新ComboxBox标记,以包含SelectedValuePath=内容

例如:


当您试图将
SelectedValue
设置为字符串时,您说组合框项目是对象

当试图设置
SelectedItem
时,组合框通过引用比较项目,因此字符串永远不会与组合框中的对象匹配

我建议将
SelectedValuePath
设置为包含字符串的对象的属性,然后您也可以将
SelectedValue
设置为字符串

public class MyObject()
{
    public string Name { get; set; }
}
作为替代方法,您可以覆盖对象的.Equals,以便它与字符串进行正确比较并返回true(不建议这样做,如果您这样做,您可能还希望覆盖
GetHasCode()

第三个选项是将组合框项目强制转换到对象中,并对照字符串检查正确的对象,然后设置
SelectedItem

var items = comType_1.Items as ObservableCollection<MyObject>;
if (items == null)
    return;

foreach(MyObject item in items)
{
    if (item.Name == k.Type_1)
    {
        comType_1.SelectedItem = item;
        break;
    }
}
var items=comType_1.作为可观察集合的项目;
if(items==null)
返回;
foreach(项目中的MyObject项目)
{
if(item.Name==k.Type_1)
{
comType_1.SelectedItem=项目;
打破
}
}

在这三个选项中,我推荐第一个应该可以工作,提供
comType_1
k中的项目。Type_1
都是字符串。但如果它们是数据对象,则情况略有不同。在设置SelectedItem@Rachel左边是一个对象,右边是一个简单的字符串。这可能就是问题所在。@Muds我如何检查是否是这种情况?itemsource必须具有您要选择的项,因此可以选择一种方法EdItem=itemsSource.First(p=>p.ID=yourItem.ID)。不幸的是,这似乎没有带来任何更改。我已尝试过,但调试时,SelectedValue仍为空:(
public class MyObject()
{
    public string Name { get; set; }
}
<ComboBox x:Name="comType_1" ItemsSource="{Binding MyCollection}"
          SelectedValuePath="Name" DisplayMemberPath="Name" />
comType_1.SelectedItem = "Test";
public class MyObject()
{
    public string Name { get; set; }

    public override bool Equals(object obj) 
    { 
        if (obj == null) 
            return false; 

        if (obj is string)
            return (string)obj == this.Name;

        if (obj is MyClass)
            return ((MyClass)obj).Name == this.Name); 

        return false;
    }
}
var items = comType_1.Items as ObservableCollection<MyObject>;
if (items == null)
    return;

foreach(MyObject item in items)
{
    if (item.Name == k.Type_1)
    {
        comType_1.SelectedItem = item;
        break;
    }
}