WPF学习笔记(14)列表视图控件ListView与数据模板
列表视图控件ListView与数据模板
- 一、ListView
- 1. ListView概述
- 2. ItemsControl类
- 3. Selector类
- 4. ListBox类
- 5. ListView类
- 6. GridView类
- 二、ListView数据模板
- 总结
一、ListView
1. ListView概述
ListView继承与ListBox,也是一个用于显示的控件。
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.listview?view=netframework-4.8
2. ItemsControl类
ItemsControl类是列表ListBox、下拉框ComboBox、菜单、表格等一系列选项的基类,部分属性如下:
|属性|说 明|
左对齐 | |
---|---|
ltemsSource | 获取或设置用于生成 ltemsControl 的内容的集合。 设置ltemsSource属性后,集合ltems是只读且固定大小的,因此不可修改。 |
ltems | 获取用于生成 ltemsControl 的内容的集合。 |
DisplayMemberPath | 获取或设置源对象上的值的路径,以用作对象的可视表示形式,不能同时设置 DisplayMemberPath 和ltemTemplate. |
ItemTemplate | 获取或设置用来显示每个项的数据模板DataTemplate。 |
ltemContainerStyle | 获取或设置应用于为每个项生成的容器元素的 Style。 |
3. Selector类
Selector类允许用户从其元素中选择项的控件。部分属性和事件如下:
属性 | 说 明 |
---|---|
SelectedIndex | 获取或设置当前选择中第一项的索引,如果选择为空返回-1。 |
Selectedltem | 获取或设置当前选择中的第一项,如果选择为空返回 null。 |
SelectedValue | 获取或设置当前选择中的第一项的某个成员值。 |
SelectedValuePath | 通常与 SelectedValue 属性一起使用,用于指定控件中选定项目的属性。 |
事件 | 说 明 |
Selected | 当选择项时发生。 |
SelectionChanged | 当选择更改时发生。 |
UnSelected | 当取消选择项时发生。 |
4. ListBox类
ListBox类的部分属性与事件如下:
|属性|说 明 |
左对齐 | |
---|---|
Selectedltems | 取当前所有选择的项。 |
SelectionMode | 获取或设置 ListBox 的选择行为。 Single 用户一次只能选择一项。 Multiple 用户可选择多个项而无需按下修改键(Shift、Ctr等)。 Extended 用户可在按住 SHIFT 键的同时选择多个连续项目或按住Ctr 键并单击项目来选择非连续项。 |
<Grid><ListView x:Name="listView" Margin="175,83,230,125"><system:String>高等数学</system:String><ContentControl>线性代数</ContentControl><ListViewItem>数率统计</ListViewItem><Rectangle Fill="Red" Width="100" Height="20"/></ListView></Grid>
5. ListView类
ListView类可以使用ListBox的所有功能,示例代码如上,其部分属性如下:
属性 | 说 明 |
---|---|
View | 获取或设置一个对象,用于定义如何在 ListView 控件中设置数据样式和组织数据。 |
6. GridView类
GridView类是一种视图模式,用于显示列和行的数据。
GridView不是控件,不能单独使用,而需要与父级控件(如ListView)结合使用。
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.web.ui.webcontrols.gridview?view=netframework-4.8
GridView类的部分属性如下:
属性 | 说 明 |
---|---|
Header | 获取或设置 列的标题。 |
HeaderStringFormat | 获取或设置标题字符串的格式。 |
Width | 获取或设置列的宽度。 |
DisplayMemberBinding | 获取或设置要为此列绑定到的数据项。 |
CellTemplate | 获取或设置用于显示列单元格内容的数据模板。 |
CellTemplateSelector | 获取或设置单元格内容的数据模板选择器。 |
HeaderTemplate | 获取或设置用于显示列标题的数据模板。 |
HeaderTemplateSelector | 获取或设置标题列的数据模板选择器。 |
示例代码和运行结果如下:
<Grid><ListView x:Name="listView" HorizontalAlignment="Left" Height="260" Width="400" Margin="200,100,0,0"><ListView.View><GridView><GridViewColumn Header="ID" Width="100" DisplayMemberBinding="{Binding Id}" /><GridViewColumn Header="姓名" Width="200" DisplayMemberBinding="{Binding Name}" /><GridViewColumn Header="分数" Width="Auto" DisplayMemberBinding="{Binding Score }" /></GridView></ListView.View></ListView>
</Grid>
public class Stu
{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }public Stu(int id, string name, int score){Id = id;Name = name;Score = score;}
}
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();List<Stu> list = new List<Stu>{new Stu(1, "张三", 100),new Stu(2, "李四", 80),new Stu(3, "王五", 75)};listView.ItemsSource = list;listView.SelectionChanged += listView_SelectionChanged;}private void listView_SelectionChanged(object sender, SelectionChangedEventArgs e){// 获取选中的项, as为强制转换Stu s = listView.SelectedItem as Stu;if (s != null){// 访问一列的数据Console.WriteLine(s.Id + "," + s.Name + "," + s.Score);Console.WriteLine("--------------------------------------");}// 遍历访问所有选中列的数据foreach (object item in listView.SelectedItems){Stu stu = (Stu)item;Console.WriteLine(stu.Id + "," + stu.Name + "," + stu.Score);}}
}
二、ListView数据模板
ItemsControl类的ItemTemplate用来获取或设置用来显示每个项的数据模板DataTemplate。
GridViewCoulmn类:
- CellTemplate用来获取或设置用于显示列单元格内容的数据模板。
- CellTemplateSelector 获取或设置单元格内容的数据模板选择器。
- HeaderTemplate 获取或设置用于显示列标题的数据模板。
- HeaderTemplateSelector 获取或设置标题列的数据模板选择器。
示例代码如下:
<Window.Resources><!--创建数据资源--><DataTemplate x:Key="myDT"><TextBlock Text="{Binding Id}" Width="30" Height="30" TextAlignment="Center" Background="Yellow"><TextBlock.Clip><EllipseGeometry Center="15,15" RadiusX="15" RadiusY="15" /></TextBlock.Clip></TextBlock></DataTemplate>
</Window.Resources><Grid><ListView x:Name="listView" HorizontalAlignment="Center" Height="260" Width="435" d:ItemsSource="{d:SampleData ItemCount=5}"><ListView.View><GridView><GridViewColumn Header="ID" Width="100" CellTemplate="{StaticResource myDT}" /><GridViewColumn Header="姓名" Width="200" DisplayMemberBinding="{Binding Name}" /><GridViewColumn Header="分数" Width="Auto" DisplayMemberBinding="{Binding Score }" /></GridView></ListView.View></ListView>
</Grid>
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();List<Stu> list = new List<Stu>{new Stu(1, "张三", 100),new Stu(2, "李四", 80),new Stu(3, "王五", 75)};listView.ItemsSource = list;}
}
public class Stu
{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }public Stu(int id, string name, int score){Id = id;Name = name;Score = score;}
}
总结
- ListView是ListBox的子类,继承了所有父类的属性
- 使用GridViewCoulmn的属性设置相应内容的数据模板