ListBox中的Items集合,是ItemsSource集合的映射。在API中是這麼聲明和定義的:
// // 摘要: // 擷取用於產生控制項內容的集合。 // // 返回結果: // 如果存在用於產生控制項內容的集合,則為該集合;否則為 null。預設值為空白集合。 public ItemCollection Items { get; }
如果ListBox的ItemsSource是List<long>, 那麼Items也就是List<long>類型;如果是ObservableCollection<someClassType>, 那Items也就是此類型集合。
通過Items,除了查看資料來源的用途,還能做什麼呢?下面將會討論一下,關於使用Items在初始化ListBox時設定預設多項選擇的狀態的用法。
雖然是比較細小的功能,但是值得瞭解一下。以下是一個樣本說明:
(1)首先建立ListBox的資料來源,該資料來源是類型為ListBoxItem的集合。
List<ListBoxItem> items = new List<ListBoxItem>(); for (int i=1; i<=12; ++i) { items.Add(new ListBoxItem() { Content = i }); // 實際用到的資料會是整型i, 包含在ListBox的Content中 } MonthLB.ItemsSource = items;
(2)接著定義一個公有成員,設定get,set訪問器,用於擷取選中的ListBoxItem項和初始化設定被選中的項。
public List<int> SelectedMonths { get { List<int> months = new List<int>(); foreach (ListBoxItem item in MonthLB.Items) { if (item.IsSelected) // 該ListBoxItem為選中狀態 { months.Add((int)item.Content); } } return months; } set { if (value == null || value.Count == 0) { foreach (var item in MonthLB.Items) (item as ListBoxItem).IsSelected = true; } else { if(value == null) {MonthLB.ItemsSource = null;return; } foreach (var index in value) { if (index < 0) index = 0;// 設定該ListBoxItem的 IsSelected = true, 即為選中狀態 (MonthLB.Items[index] as ListBoxItem).IsSelected = true; } } } }
(3)ListBox的屬性SelectionMode設定為複選狀態,即SelectionMode="Multiple"。這樣就可以實現ListBox的複選和初始化多選狀態啦。
可能還有更好的辦法,但我沒找到;如果誰知道,please tell me。
~_~