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;
}
}