Установить в выпадающем списке Silverlight выбранный элемент из имени строки - PullRequest
2 голосов
/ 18 октября 2010

Я пытаюсь установить выбранный элемент в своем комбинированном списке 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» из строки.

Я пытался использовать MyComboBox.items с LINQ, но это ни к чему не привело.

Здесь есть несколько похожих вопросов о переполнении стека, но ни на один из них не было ответа.

Ответы [ 5 ]

7 голосов
/ 18 октября 2010

Если у вас есть причина, по которой вам нужно обернуть строки в ComboBoxItem, тогда это должно сработать.

MyComboBox.Items.SelectedItem = 
    MyComboBox.Items.SingleOrDefault(c => (c as ComboBoxItem).Content == myString);

Я бы порекомендовал не вставлять ComboBoxItem напрямую и устанавливать элементы в Stringили настройте коллекцию в коде и привяжите ее.

1 голос
/ 17 апреля 2014

Привет, я применяю функцию для индекса индекса в 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;

     }
1 голос
/ 18 октября 2010

Этого можно добиться с помощью следующего.

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();
    }
0 голосов
/ 18 октября 2010

Понятно, вы можете добавить имя к 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"

Тогда оригинальный пример будет работать

0 голосов
/ 18 октября 2010

Если вы помещаете строки в выпадающий список, вы можете использовать

MyComboBox.Items.IndexOf("Pizza")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...