WinRT ComboBox SelectedValue 为空

WinRT ComboBox SelectedValue is null

我已经创建了一个 class 用于创建要添加到组合框的项目

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"/>

我在code-behind中的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 显示为 null,尽管为其分配了一个值。 其余代码没有问题,并且存在 State_Id=3

的状态

我用两种方法解决了这个问题

第一种方法是获取状态变量中的状态列表。将其分配给 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>

另外,我想 post 告诉我的 WinRT 开发人员,不需要像我在使用组合框的问题中所做的那样创建单独的 class ComboBoxItemClass。只需获取您的状态列表,将其分配给 ItemSource 并使用上述任何方法即可。

此外,如果您想要 ComboBox 中的 State_Name 和 State_Id,您可以这样做。

State mystate=(State)ComboBox.SelectedItem;