0

Я создал класс для создания элемента, чтобы добавить в выпадающий списокWinRT ComboBox SelectedValue является нулевым

public class ComboBoxItemClass 
{ 
    public string Text { get; set; } 
    public object Value { get; set; } 

    public override string ToString() 
    { 
     return Text; 
    } 
} 

Мой XAML выглядит следующим образом для комбобоксе

<TextBlock Text="State"/> 
<ComboBox x:Name="cbState"/> 

Мой C# код в code- сзади выглядит следующим образом:

private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e) 
    { 
     List<ComboBoxItemClass> state_items = new List<ComboBoxItemClass>(); 

     List<State> states = Location.GetStates(); 
     foreach(State s in states) 
     { 
      ComboBoxItemClass item = new ComboBoxItemClass() { Text = s.State_Name, Value = s.State_Id }; 
      state_items.Add(item); 
     } 
     cbState.ItemsSource = state_items; 
     cbState.SelectedValue = 3; 

Комбобокс при работе в эмуляторе не отображает выбранное состояние. При нажатии на нее отображается список состояний.

При отладке выбранного значения отображается значение null, несмотря на присвоение ему значения. Там нет никаких проблем с остальной частью кода и существует состояние с State_Id = 3

+0

Вы пытались установить 'SelectedIndex'? 'SelectedValue' имеет тип' object', и вам нужно назначить ему один из объектов в вашей коллекции, чтобы он работал. –

+0

Я выбираю индекс, но это не то, что я хочу –

+0

Я пробовал cbstate.SelectedValue = mystateobject, но все равно это null –

ответ

0

Я решил эту проблему двумя способами

Первый способ, чтобы получить список состояний в состояниях переменных. Назначьте это компоненту ComboBox ItemSource. Затем получите State_Id и найдите индекс этого конкретного состояния из одного и того же списка состояний и назначьте его выбранному индексу.

Код За следующим образом

states = Location.GetStates(); 

cbState.ItemsSource = states; 
cbState.SelectedIndex = states.IndexOf(states.Where(x=>x.State_Id==State_Id).First()); 

Второй метод, как предложено в разделе комментариев

states = Location.GetStates(); 
cbState.ItemsSource = states; 
int index=states.IndexOf(states.Where(x=>x.State_Id==State_Id).First()); 
cbState.SelectedItem = states[index]; 

XAML является следующим

<ComboBox x:Name="cbState" > 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding State_Name}"></TextBlock> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Кроме того, я хотел бы отправить к моему разработчикам WinRT, что не требуется создавать отдельный класс, такой как ComboBoxItemClass, как В вопросе я использовал поле со списком. Просто получите список своих состояний, назначьте его ItemSource и используйте любой из вышеперечисленных методов.

Также, если вы хотите, чтобы State_Name и State_Id из ComboBox вы могли это сделать.

State mystate=(State)ComboBox.SelectedItem; 

 Смежные вопросы

  • Нет связанных вопросов^_^