WPF笔记(4)ListBox和ListView
许多控件都派生自ControlControl类,例如:Window、button、ScrollViewer等,他们都有一个Content属性,可以用来添加其他元素。下面要介绍的时Control的另一个分支:ItemsControl。它直接从Control继承。从ItemsControl继承的控件可以显示多个Item。这些控件包括:Menus、Toolbars、statusbars、treeview,listview等。
Listbox和Combox,TabControl一样,都派生自Selector抽象类。而ListView则派生自ListBox。
Control
ItemsControl
Selector (abstract)
ComboBox
ListBox
ListView
TabControl
Listbox可以允许用户选择一个和多个Item。ComboBox和LlistBox不同的是,他不会一直显示Items列表,而是只有在下拉的时候才会显示。
简单介绍ListBox:
SelectionMode:允许选择一个或多个项目。
ScrollIntoView:滚动到合适位置,以便选择项可见。
SelectionChangedEventArgs:此类含有两个属性:AddItems和RemovedItems,在允许多项选择时会用到。
因为在ListBox中的项都是同一类型,所以我们还可以用到下面三个属性:
DisplayMemberpath:这是ItemsControl的属性,可以绑定要显示的属性的name。
SelectedValuePath:来自Selector类。用来设置要表示的Item值的属性的名称。
SelectedValue:获取由SelectedValuePath表示的Item的属性值。
如:DisplayMemberpath = name;SelectedValuePath= Value;
则在Listbox中界面显示的是Itme的name属性,但我们通过SelectedValue获取的却是Item的Value属性。
SetBinding和DataContext:数据绑定和上下文。
如:lstbox.SetBinding(ListBox.SelectedValueProperty, "Background");
lstbox.DataContext = this;
表示将listbox的SelecValue属性与this对象的Backgroud属性绑定。
ListView
ListBox可以完成大多数显示操作。但是对于Deitails视图来说,因为它需要多列和列标题。在这种情况下就需要ListView控件。Listview直接继承自ListBox。ListView只比ListBox多了一个属性:View(ViewBase类型)。如果View为null,那么ListView就是一个Listbox。
目前从ViewBase继承的类只有一个GridView;他可以通过多列来表示对象。GridView的核心属性是Columns。每一列都是一个GridViewColumn,它包括列标题、宽度、要表示的Item等。
下面是ListView的普通用法:首先定义一个要显示的类。然后创建一个ListView绑定该类进行显示。
由于各个列显示的对象类型可能不一样,例如第一列显示text。第二列显示一个combox。在这样的情况下,就需要使用模板。如DataTemplate。然后将模板绑定到GridViewColumn的CellTemplate属性。
如:
在上面将Textblock的text属性绑定到了"Value"属性。所以就不需要再使用DisplayMemberBinding 属性。