0

我創建了一個類來創建的項目添加到組合框WinRT的組合框的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#代碼的代碼 - 後面如下

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; 

模擬器上運行的組合框不顯示選定的狀態。點擊它會顯示狀態列表。

在調試selectedvalue時顯示爲空,儘管爲其分配了一個值。 有一個與代碼的其餘部分沒有問題和存在狀態與STATE_ID = 3

+0

你試過設置'SelectedIndex'嗎? 'SelectedValue'屬於'object'類型,你需要爲它分配一個對象來使它工作。 –

+0

雅選擇的索引正在設置,但這不是我想要的 –

+0

我試過cbstate.SelectedValue = mystateobject,但它仍然是空 –

回答

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並使用上述任何方法。

此外,如果你想從ComboBox的State_Name和State_Id,你可以做到這一點。

State mystate=(State)ComboBox.SelectedItem;