当前位置: 首页 > news >正文

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的属性设置相应内容的数据模板
http://www.lqws.cn/news/582049.html

相关文章:

  • demo01:基于 SpringMVC 的用户管理系统
  • Linux习题
  • 设计模式-观察者模式(发布订阅模式)
  • Redis 安装使用教程
  • RWKV-8 系列之 DeepEmbedAttention:精简 KV 缓存,尤其适合混合模型(RWKV-7s)
  • 使用pyflink进行kafka实时数据消费
  • 在 Vue3 + Element Plus 中实现 el-table 拖拽排序功能
  • mysql 小版本升级实战分享
  • 基于librdkafka开发的C++客户端,生产者生产发送数据失败问题处理
  • 百度文心大模型4.5系列正式开源,开源会给百度带来什么?
  • 网络安全2023—新安全新发展
  • MySQL (四):连接查询和索引
  • macos 安装 xcode
  • 【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
  • 基于C#的OPCServer应用开发,引用WtOPCSvr.dll
  • python | numpy小记(五):理解 NumPy 中的 `np.arccos`:反余弦函数
  • 卡片跳转到应用页面(router事件)
  • 一文详解Modbus协议原理、技术细节及软件辅助调试
  • 华为云Flexus+DeepSeek征文|​​华为云ModelArts Studio大模型 + WPS:AI智能PPT生成解决方案​
  • 基于时间策略+应用过滤的游戏防沉迷方案:技术实现与工具推荐
  • 本地服务器部署后外网怎么访问不了?内网地址映射互联网上无法连接问题的排查
  • 【Pandas】pandas DataFrame Flags
  • AR 学习:开启未来学习新视界​
  • Stable Diffusion 项目实战落地:从0到1 掌握ControlNet 第四篇 风格化字体大揭秘:从线稿到涂鸦,ControlNet让文字焕发新生
  • SQuirreL SQL:一个免费的通用数据库开发工具
  • OpenWrt | 使用 Docker 运行 iperf3
  • 2 大语言模型基础-2.2 生成式预训练语言模型GPT-2.2.2 有监督下游任务微调-Instruct-GPT强化学习奖励模型的结构改造与维度转换解析
  • AI行业深度观察:从资本竞逐到技术突破的全面解析
  • 38.docker启动python解释器,pycharm通过SSH服务直连
  • 物联网基础