Reputation: 1489
I am trying to set the selected item in my silverlight combobox from a string.
In this example lets say I have a combobox named "MyComboBox" as follows:
<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>
I am randomly selecting a string value above from a list to simulate a users saved preference. The problem I am facing is trying to grab the index of "MyComboBox" from a string.
I've tried using MyComboBox.items wtih LINQ but that has taken me nowhere.
There are some similar questions here on stack overflow but none of these have been answered.
Upvotes: 2
Views: 11134
Reputation: 11
Hi i am applied function for encountred index in 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;
}
Upvotes: 1
Reputation: 8773
You can achieve this by using the following.
SetSelectedItem("Pizza");
/// Set selected item as string.
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();
}
Upvotes: 1
Reputation: 5488
If you have a reason that you have to wrap the strings in ComboBoxItem
then this should work.
MyComboBox.Items.SelectedItem =
MyComboBox.Items.SingleOrDefault(c => (c as ComboBoxItem).Content == myString);
I would recommend to not directly insert ComboBoxItem
and set items to String
or setup a collection in code and bind to it.
Upvotes: 7
Reputation: 1307
I see, you can add a name to the xaml
<ComboBoxItem Tag="0" Name="CBIPizza" IsSelected="True" Content="Pizza" />
then use
MyComboBox.Items.IndexOf(CBIPizza);
or... Make the items strings instead using
<ComboBox Name="MyComboBox>
<ComboBox.Items>
<sys:String>Pizza</sys:String>
<sys:String>Bread Sticks</sys:String>
</ComboBox.Items>
which of course requires defining
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Then the original example would work
Upvotes: 0
Reputation: 1307
If you are putting strings into the combobox then you can use
MyComboBox.Items.IndexOf("Pizza")
Upvotes: 0