0

Ich habe eine Klasse erstellt das Element für die Erstellung zu ComboboxWinRT ComboBox SelectedValue ist null

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

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

Meine XAML ist hinzuzufügen, wie sie für die Combobox folgt

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

Mein C# -Code in der Code- dahinter ist wie folgt

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; 

Die Combobox beim Ausführen im Emulator zeigt den ausgewählten Zustand nicht an. Beim Klicken zeigt es die Liste der Staaten an.

Beim Debuggen wird der ausgewählte Wert als null angezeigt, obwohl ihm ein Wert zugewiesen wurde. Es gibt kein Problem mit dem Rest des Codes und es gibt einen Zustand mit state_id = 3

+0

Haben Sie versucht, 'SelectedIndex' zu setzen? 'SelectedValue' ist vom Typ' object' und Sie müssen ihm eines der Objekte in Ihrer Sammlung zuweisen, damit es funktioniert. –

+0

Ya selected index wird gesetzt, aber das ist nicht, was ich will –

+0

Ich versuchte cbstate.SelectedValue = mystateobject aber immer noch ist es null –

Antwort

0

ich dies auf zwei Arten gelöst habe

Der erste Weg ist Variable, die die Liste der Staaten in Staaten zu bekommen. Weisen Sie dies ComboBox ItemSource zu. Dann holen Sie sich die State_Id und suchen Sie den Index dieses bestimmten Zustands aus der Liste der gleichen Zustände und ordnen Sie ihn dem ausgewählten Index zu.

-Code Behind wie folgt

states = Location.GetStates(); 

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

Zweite Methode ist als

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

XAML als

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

folgt, ist auch möchte ich schreiben mag meine anderen WinRT-Entwicklern, dass es nicht erforderlich ist, eine separate Klasse wie ComboBoxItemClass zu erstellen Ich habe in der Frage Combo-Box verwenden. Holen Sie sich einfach die Liste Ihrer Staaten, weisen Sie sie ItemSource zu und verwenden Sie eine der oben genannten Methoden.

Auch wenn Sie die State_Name und State_Id von der ComboBox möchten, können Sie dies tun.

State mystate=(State)ComboBox.SelectedItem;