深入探讨WPF的ListView控件
接上一篇博客初步探讨WPF的ListView控件(涉及模板、查找子控件) 我们继续探讨ListView的用法
一、实现排序功能
需求是这样的:假如我们把学生的分数放入ListView,当我们单机ListView头部时候实现对按分数的排序,更改Xaml如下:
<Window x:Class="ContentDataTemplate.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:System.Collections;assembly=mscorlib"
xmlns:local="clr-namespace:ContentDataTemplate"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<c:ArrayList x:Key="stuList">
<local:Student Id="1" Name="小明" Grade="研一" Professional="计算机技术" Score="30" HasJob="true"></local:Student>
<local:Student Id="2" Name="小李" Grade="大一" Professional="网络工程" Score="80" HasJob="true"></local:Student>
<local:Student Id="3" Name="小张" Grade="研一" Professional="软件工程" Score="100" HasJob="False"></local:Student>
<local:Student Id="4" Name="小王" Grade="研一" Professional="自动化控制" Score="70" HasJob="true"></local:Student>
<local:Student Id="5" Name="大王" Grade="研一" Professional="软件设计" Score="60" HasJob="False"></local:Student>
</c:ArrayList>
<DataTemplate x:Key="NameDt">
<TextBox x:Name="textboxName" Text="{Binding Name}" GotFocus="textboxName_GotFocus"></TextBox>
</DataTemplate>
<DataTemplate x:Key="GradeDt">
<TextBox x:Name="textboxGrade" Text="{Binding Grade}"></TextBox>
</DataTemplate>
<DataTemplate x:Key="ProfessionalDt">
<TextBox x:Name="textboxProfessional" Text="{Binding Professional}"></TextBox>
</DataTemplate>
<DataTemplate x:Key="ScoreDt">
<TextBox Name="textboxScore" Text="{Binding Score}"></TextBox>
</DataTemplate>
<DataTemplate x:Key="HasJobDt">
<CheckBox x:Name="CheckBocHasJob" IsChecked="{Binding HasJob}" Checked="CheckBocHasJob_Checked"></CheckBox>
</DataTemplate> </Window.Resources>
<Grid Margin="5">
<ListView x:Name="ListViewStudent" ItemsSource="{StaticResource stuList}">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Id}"></GridViewColumn>
<GridViewColumn Header="姓名" CellTemplate="{StaticResource NameDt}"></GridViewColumn>
<GridViewColumn Header="年级" CellTemplate="{StaticResource GradeDt}"></GridViewColumn>
<GridViewColumn Header="专业" CellTemplate="{StaticResource ProfessionalDt}"></GridViewColumn>
<GridViewColumn Header="分数" CellTemplate="{StaticResource ScoreDt}"></GridViewColumn>
<GridViewColumn Header="已工作" CellTemplate="{StaticResource HasJobDt}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
更改地方也不多,Student类添加Score属性,DataTemplate中增加Score的列模板,数据源添加一些默认的分数。
数据有了,下面就是排序功能了,首先写一个排序的函数:StuSort(string sortBy, ListSortDirection direction);排序功能的实现是通过CollectionViewSource类实现的,这个类我就不介绍了,可以对数据源进行排序分组什么的,详情参考MSDN 。代码如下:
private void StuSort(ListView lv, string sortBy, ListSortDirection direction)
{ ICollectionView dataView =CollectionViewSource.GetDefaultView(lv.ItemsSource);//获取数据源视图
dataView.SortDescriptions.Clear();//清空默认排序描述
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);//加入新的排序描述
dataView.Refresh();//刷新视图
}
函数写好了,介绍下此函数的三个参数,第一个毫无疑问是数据的承载着ListView了,第二个比较重要是要通过那个字段排序,本例子是通过Student的Score来排序,所以就是“Score”,第三个参数是排序方向,升序或者降序了。然后当我们点击ListView的Header的时候触发此函数。Xaml页面中的ListView中监控GridViewColumnHeaderClick的路由事件,
<ListView x:Name="ListViewStudent"
ItemsSource="{StaticResource stuList}"
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler"
>
后台实现GridViewColumnHeaderClickedHandler事件,代码如下:
private void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
{
GridViewColumnHeader gch=e.OriginalSource as GridViewColumnHeader;
StuSort(this.ListViewStudent, "Score", ListSortDirection.Ascending);
}
运行,单机分数,实现排序功能。

二、具有强大视图功能ListView
ListView可以提供不同的视图功能切换,但是默认提供了仅仅是GridView,那我们是不是可以自定义自己的View呢,答案是肯定的。我就不再细说因为微软的示例已经很好了,http://msdn.microsoft.com/zh-cn/library/vstudio/ms771469(v=vs.90).aspx 。讲的很详细,一共提供了四种自定义视图。
深入探讨WPF的ListView控件的更多相关文章
- 初步探讨WPF的ListView控件(涉及模板、查找子控件) - GavinJun
本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmln ...
- 初步探讨WPF的ListView控件(涉及模板、查找子控件)
本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmln ...
- WPF的ListView控件自定义布局用法实例
正文: 如何布局是在App.xaml中定义源码如下 <Application x:Class="CWebsSynAssistant.App" xmlns="ht ...
- WPF中ListView控件怎么添加新的tiem时滚动条一直在最下面
listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1])
- WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...
- C# ListView 控件和 INotifyPropertyChanged 接口
ListView 控件和 DataGridView 控件 ListView 是跟 Winform 中 DataGridView 用法以及显示效果差不多的一个 WPF 控件,可以通过列表的方式方便的显示 ...
- ListView 控件和 INotifyPropertyChanged 接口
原文:ListView 控件和 INotifyPropertyChanged 接口 ListView 控件和 DataGridView 控件 ListView 是跟 Winform 中 DataGri ...
- WPF中TreeView控件SelectedItemChanged方法的MVVM绑定
问题描述:左侧treeview控件中点击不同类别的节点时,右侧的页面会显示不同的权限.比如对于My Publications,拥有Modify和Delete两种权限,对于My Subscription ...
- WPF中TreeView控件数据绑定和后台动态添加数据(二)
写在前面:在(一)中,介绍了TreeView控件MVVM模式下数据绑定的方法.在这篇文章中,将总结给节点添加事件的方法,这样说有些不对,总之实现的效果就是点击某个节点,将出现对应于该节点的页面或者数据 ...
随机推荐
- js控制json生成菜单——自制菜单(一)
此文档解决以下问题: 1.JSON文件的书写方式 2.jQuery.getJSON()的运用 3.jQuery.each()的运用 4.jQuery的DOM 操作方法之一:.append()的运用 5 ...
- Android的Databinding-自定义生成类名字
1. 在xml中,添加class的属性并设置为自定义名字<data class="com.example.CustomBinding"></data>2. ...
- leetcode344 反转字符串 c++实现
编写一个函数,其作用是将输入的字符串反转过来. 示例 1: 输入: "hello" 输出: "olleh" 示例 2: 输入: "A man, a p ...
- iOS开发-命令模式
命令模式算是设计模式中比较简单的,最常见的例子是工作任务安排下来进行编程,如果工作任务不需要完成,我们可以取消我们之前完成的代码,也可以理解为回滚撤销操作.这里面涉及到命令模式中的两个对象,一个是动作 ...
- 4种事务的隔离级别,InnoDB怎样巧妙实现?
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/z50L2O08e2u4afToR9A/article/details/82186189 事务ACID ...
- .NET 并行编程——数据并行
本文内容 并行编程 数据并行 环境 计算 PI 矩阵相乘 把目录中的全部图片复制到另一个目录 列出指定目录中的所有文件,包括其子目录 最近,对多线程编程,并行编程,异步编程,这三个概念有点晕了,之前我 ...
- 微软BI 之SSIS 系列 - 在 SSIS 中将指定目录下的所有文件分类输出到不同文件夹
开篇介绍 比如有这样的一个需求,旧的一个业务系统通常将产出的文件输出到同一个指定的目录下的不同子目录,输出的文件类型有 XML,EXCEL, TXT 这些不同后缀的文件.现在需要在 SSIS 中将它们 ...
- 微软BI 之SSRS 系列 - 如何在 MDX 查询中获取有效的 MEMBER 成员属性作为参数传递
这篇小文章的来源是 天善问答,比如在报表中要根据点击某一个成员名称然后作为参数传递给自身报表或者下一张报表,这个在普通的 SQL 查询中没有任何问题.但是在 MDX 中查询是有区别的,比如在 MDX ...
- vmware vSphere 5.5的14个新功能
摘录自:http://www.networkworld.com/slideshow/117304/12-terrific-new-updates-in-vmware-vsphere-55.html#s ...
- Spark GraphX实例(3)
7. 图的聚合操作 图的聚合操作主要的方法有: (1) Graph.mapReduceTriplets():该方法有一个mapFunc和一个reduceFunc,mapFunc对图中的每一个EdgeT ...