0

コンボボックスに追加するアイテムを作成するためのクラスを作成しました

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 の状態が存在します。

4

1 に答える 1

0

私はこれを2つの方法で解決しました

最初の方法は、states 変数で状態のリストを取得することです。これを ComboBox ItemSource に割り当てます。次に、State_Id を取得し、同じ状態リストからその特定の状態のインデックスを見つけて、選択したインデックスに割り当てます。

コードビハインドは次のとおりです

states = Location.GetStates();

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

2番目の方法は、コメントセクションで提案されているとおりです

 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>

また、コンボ ボックスを使用するために質問で行ったように、ComboBoxItemClass のような別のクラスを作成する必要がないことを、仲間の WinRT 開発者に投稿したいと思います。状態のリストを取得し、それを ItemSource に割り当てて、上記のメソッドのいずれかを使用するだけです。

また、ComboBox から State_Name と State_Id が必要な場合は、これを行うことができます。

State mystate=(State)ComboBox.SelectedItem;
于 2016-04-04T15:18:47.260 に答える