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绑定该类进行显示。

Code

     

     由于各个列显示的对象类型可能不一样,例如第一列显示text。第二列显示一个combox。在这样的情况下,就需要使用模板。如DataTemplate。然后将模板绑定到GridViewColumn的CellTemplate属性。

如:

Code

     在上面将Textblock的text属性绑定到了"Value"属性。所以就不需要再使用DisplayMemberBinding 属性。

     

     

原文地址:https://www.cnblogs.com/jyz/p/1295536.html