我创建了一个用于创建要添加到组合框
的项目的类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
的状态答案 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;