windows8开发-关于ListBox中的Items元素

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。 ~_~

你可能感兴趣的:(windows8开发-关于ListBox中的Items元素)