WinRT ComboBox SelectedValue为null

时间:2016-04-04 08:21:41

标签: xaml windows-phone-8 windows-runtime win-universal-app uwp-xaml

我创建了一个用于创建要添加到组合框

的项目的类
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显示为null。 其余代码没有问题,并且存在State_Id = 3

的状态

1 个答案:

答案 0 :(得分: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;