2012-08-09 48 views
1

我有一個方法,調用和加載我的組合框。一旦通話完成,我將「全部」添加到組合框中。不幸的是,當它被添加到列表中時,「全部」採用索引0來混淆一切。從表格中選擇的索引應該是「a」。有沒有辦法將「全部」設置爲-1作爲索引?仍然有「a」作爲索引0而不是索引1的最好方法是什麼?Combobox選擇索引是錯誤的

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; 
    } 
} 

表項結果

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

回答

4

不要依賴於所選擇的指數,該的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會是顯示

您選擇的值路徑將是代碼


和你的XAML的CombobBox看起來像:

<ComboBox 
      ItemsSource="{Binding Path=Items}" 
      DisplayMemberPath="Display" 
      SelectedValuePath="Code" 
      SelectedValue="{Binding Path=Selection}"/> 
4

的項目中的組合框的索引是從零開始的,所以也沒有辦法,你可以在添加項目「-1」。選定的索引「-1」表示您沒有選擇任何項目。

參見http://msdn.microsoft.com/en-US/library/system.windows.controls.primitives.selector.selectedindex.aspx

獲取或設置第一項的索引在當前選擇或返回負一(-1),如果選擇爲空。

...

在支持多種選擇,清除當前選擇的項目,並設置選擇到索引指定的項目一個選擇器設置的SelectedIndex。如果選擇爲空,SelectedIndex返回-1。

如果將SelectedIndex設置爲小於-1的值,則會引發ArgumentException。如果將SelectedIndex設置爲等於或大於子元素數的值,則該值將被忽略。