2

コンボボックスを呼び出してロードするメソッドがあります。呼び出しが行われると、コンボボックスの最初になるように「すべて」を追加しました。残念ながら、これがリストに追加されると、「すべて」のインデックスが 0 になり、すべてが台無しになります。選択されたインデックスは、表のように「a」である必要があります。「すべて」をインデックスとして-1に設定する方法はありますか? 「a」を 1 のインデックスではなく 0 のインデックスとして保持する最良の方法は何ですか?

private void Load()
{
    List<string> all = dataSource.GetAll();

    if (all.Count > 1)
    {
        cbAll.Items.Clear();
        cbAll.BeginUpdate();


            cbAll.Items.Add("All");

            foreach (var item in all)
            {
                cbAll.Items.Add(item);
            }
            cbAll.SelectedIndex = 0;
    }
}

表 ITEM 結果

0 -- a
1 -- b
2 -- c
3 -- d
4

2 に答える 2

6

選択したインデックスに依存せず、ItemsSource を にObservableCollection<T>バインドし、SelectedItem をタイプのプロパティにバインドし、バインドされたプロパティをT使用して選択を読み取ります。

選択した値と異なる表示値が必要な場合は、それらを小さなクラスでラップします。

public class Item
{
  public int Code { get; set; }
  public string Display { get; set; }
}

次に、ItemsSource がプロパティにバインドされます。

public ObservableCollection<Item> Items { get; set; }

public int Selection { get; set; }

DisplayMemberPath はDisplayになります

SelectedValuePath はCodeになります


CombobBox の Xaml は次のようになります。

<ComboBox 
          ItemsSource="{Binding Path=Items}" 
          DisplayMemberPath="Display" 
          SelectedValuePath="Code" 
          SelectedValue="{Binding Path=Selection}"/>
于 2012-08-09T22:21:32.440 に答える
4

コンボボックス内の項目のインデックスは 0 ベースなので、"-1" で項目を追加する方法はありません。「-1」の選択されたインデックスは、アイテムが選択されていないことを意味します。

http://msdn.microsoft.com/en-US/library/system.windows.controls.primitives.selector.selectedindex.aspxを参照してください。

現在の選択範囲内の最初の項目のインデックスを取得または設定するか、選択範囲が空の場合は負の 1 (-1) を返します。

...

複数選択をサポートする Selector で SelectedIndex を設定すると、既存の選択項目がクリアされ、インデックスで指定された項目に選択が設定されます。選択範囲が空の場合、SelectedIndex は -1 を返します。

SelectedIndex を -1 より小さい値に設定すると、ArgumentException がスローされます。SelectedIndex を子要素の数以上の値に設定すると、その値は無視されます。

于 2012-08-09T21:10:06.063 に答える