选择组合框.按字符串项目
本文关键字:字符串 项目 组合 选择 | 更新日期: 2023-09-27 18:25:34
我有一个名为comType_1
的组合框,其中包含某些可选字符串。我有一个变量k.Type_1
,它包含所需的字符串。
示例:
k.Type_1
包含"测试"。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=Content,
示例:
<ComboBox Name="combo1" SelectedValuePath="Content">
然后你可以执行任务:
comType_1.SelectedValue = k.Type_1;
当您试图将SelectedValue
设置为字符串时,您说ComboBox项是对象。
ComboBox在尝试设置SelectedItem
时通过引用比较项目,因此您的字符串永远不会与ComboBox中的对象匹配。
我建议将SelectedValuePath
设置为包含字符串的对象的属性,然后也可以将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";
作为一种替代方案,您可以覆盖对象的.Equals,以便它与字符串进行正确比较并返回true(不建议使用,如果您这样做,您可能也想覆盖GetHasCode()
)
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;
}
}
第三种选择是将组合框项目投射到对象中,并根据字符串检查正确的对象,然后设置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;
}
}
在这三种选择中,我推荐第一种。