C# 从字符串名称中设置Silverlight combobox所选项目

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

我正在尝试从字符串设置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>

我从上面的列表中随机选择一个字符串值来模拟用户保存的首选项。我面临的问题是试图从字符串中获取“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;

     }