我正在尝试从字符串中设置我的silverlight组合框中的所选项目。
在这个例子中,假设我有一个名为“MyComboBox”的组合框,如下所示:
<ComboBox Height="23" x:Name="MyComboBox" Width="200" HorizontalAlignment="Left">
<ComboBoxItem Tag="0" Content="Pizza" IsSelected="True"/>
<ComboBoxItem Tag="1" Content="Soda"/>
<ComboBoxItem Tag="2" Content="Wings"/>
<ComboBoxItem Tag="3" Content="Bread Sticks"/>
</ComboBox>
我从列表中随机选择一个字符串值来模拟用户保存的首选项。我面临的问题是尝试从字符串中获取“MyComboBox”的索引。
我尝试过使用带有LINQ的MyComboBox.items,但这让我无处可去。
这里有一些关于堆栈溢出的类似问题,但这些问题都没有得到解答。
答案 0 :(得分:7)
如果您有必要将字符串包装在ComboBoxItem
中,那么这应该可行。
MyComboBox.Items.SelectedItem =
MyComboBox.Items.SingleOrDefault(c => (c as ComboBoxItem).Content == myString);
我建议不要直接插入ComboBoxItem
并将项目设置为String
或在代码中设置集合并绑定到它。
答案 1 :(得分:1)
您可以使用以下方法实现此目的。
SetSelectedItem("Pizza");
///将所选项目设置为字符串。
private void SetSelectedItem(string selectedString)
{
Func<ComboBoxItem, ComboBoxItem> selectionFunc = (item) =>
{
if(item.Content.ToString() == selectedString)
return item;
return null;
};
this.MyComboBox.SelectedItem = MyComboBox.Items.Select(s => selectionFunc(s as ComboBoxItem)).FirstOrDefault();
}
答案 2 :(得分:1)
您好我在Combobox中使用了encountred index的功能
private int Search_Item_Return_Index(ComboBox combo, string Search)
{
int index=-1;
foreach (ComboBoxItem item in combo.Items)
{
index++;
string var = item.Content.ToString() ;
if (var.Equals(Search))
{
return index;
}
}
return index;
}
答案 3 :(得分:0)
如果您将字符串放入组合框中,则可以使用
MyComboBox.Items.IndexOf("Pizza")
答案 4 :(得分:0)
我明白了,您可以为xaml添加名称
<ComboBoxItem Tag="0" Name="CBIPizza" IsSelected="True" Content="Pizza" />
然后使用
MyComboBox.Items.IndexOf(CBIPizza);
或...使用
制作项目字符串 <ComboBox Name="MyComboBox>
<ComboBox.Items>
<sys:String>Pizza</sys:String>
<sys:String>Bread Sticks</sys:String>
</ComboBox.Items>
当然需要定义
xmlns:sys="clr-namespace:System;assembly=mscorlib"
然后原始示例将起作用