C# 从字符串名称中设置Silverlight combobox所选项目
我正在尝试从字符串设置silverlight组合框中的选定项 在本例中,假设我有一个名为“MyComboBox”的组合框,如下所示:C# 从字符串名称中设置Silverlight combobox所选项目,c#,silverlight,C#,Silverlight,我正在尝试从字符串设置silverlight组合框中的选定项 在本例中,假设我有一个名为“MyComboBox”的组合框,如下所示: <ComboBox Height="23" x:Name="MyComboBox" Width="200" HorizontalAlignment="Left"> <ComboBoxItem Tag="0" Content="Pizza" IsSelected="True"/> <ComboBoxItem Tag="1
<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>
我从上面的列表中随机选择一个字符串值来模拟用户保存的首选项。我面临的问题是试图从字符串中获取“mymbobox”的索引
我尝试过使用MyComboBox.items和LINQ,但没有任何效果
这里有一些关于堆栈溢出的类似问题,但没有一个得到回答。如果将字符串放入组合框,则可以使用
MyComboBox.Items.IndexOf("Pizza")
我明白了,您可以为xaml添加一个名称
<ComboBoxItem Tag="0" Name="CBIPizza" IsSelected="True" Content="Pizza" />
或者。。。将项目设置为字符串,而不是使用
<ComboBox Name="MyComboBox>
<ComboBox.Items>
<sys:String>Pizza</sys:String>
<sys:String>Bread Sticks</sys:String>
</ComboBox.Items>
然后,原始示例将起作用如果您有理由必须将字符串包装在
ComboBoxItem
中,那么这应该起作用
MyComboBox.Items.SelectedItem =
MyComboBox.Items.SingleOrDefault(c => (c as ComboBoxItem).Content == myString);
我建议不要直接插入
ComboBoxItem
并将项目设置为String
,也不要在代码中设置集合并绑定到它。您可以使用以下方法实现此目的
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();
}
private void SetSelectedItem(string selectedString)
{
Func selectionFunc=(项目)=>
{
if(item.Content.ToString()==selectedString)
退货项目;
返回null;
};
this.MyComboBox.SelectedItem=MyComboBox.Items.Select(s=>selectionFunc(s作为ComboBoxItem)).FirstOrDefault();
}
您好,我是Combobox中已编码索引的应用函数
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;
}
你不只是设置MyComboBox.SelectedItem有什么原因吗?你试过MyComboBox.SelectdValue吗?@Stephan这正是我想做的,但是没有办法将字符串转换为ComboboxItem所有这些返回值都是-1,无论我在索引中设置了什么,你向ComboxBox添加字符串吗?如果您执行MyComboBox.Items[0],您会得到什么类型的对象?@KeithMahney System.Windows.Controls.ComboboxItems正如我所说,如果您将字符串添加到combobox中,则此操作有效。如果设置var myPizzaObject=新食品(“比萨饼”);mymbobox.Items.Add(myPizzaObject);然后,如果选中,mymbobox.SelectedItem就是MyPizza对象。要找到它,您需要在某处存储对myPizzaObject的引用,并使用MyComboBox.Items.IndexOf(myPizzaObject)。如果您不向其添加字符串,而是定义comboboxitems,那么有没有办法获取的索引?我在更新的问题/示例中如何使用它?这非常有效。非常感谢。我已将此标记为答案。我所做的唯一修改是在.Content结尾添加.ToString()以比较字符串值
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();
}
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;
}