WPF实现带筛选功能的DataGrid.docx
第
WPF实现带筛选功能的DataGrid
目录涉及知识点示例截图核心源码不足与思考
涉及知识点
在本示例中,从数据绑定,到数据展示,涉及知识点如下所示:
DataGrid,要WPF提供的进行二维数据展示在列表控件,默认功能非常简单,但是可以通过数据模板或者控件模板进行扩展和美化,可伸缩性很强。MVVM,是Model-View-ViewModel的简写,主要进行数据和UI进行前后端分离,在本示例中,主要用到的MVVM第三方库为CommunityToolkit.Mvvm,大大简化原生MVVM的实现方式。集合视图,要对DataGrid中的数据进行分组、排序和筛选,可以将其绑定到支持这些函数的CollectionView。然后,可以在不影响基础源数据的情况下处理CollectionView中的数据。集合视图中的更改反映在DataGrid用户界面(UI)中。Popup控件,直接继承FrameworkElement,提供了一种在单独的窗口中显示内容的方法,该窗口相对于指定的元素或屏幕坐标,浮动在当前Popup应用程序窗口上,可用于悬浮窗口。
示例截图
本示例主要模仿Excel的筛选功能进行实现,右键标题栏打开浮动窗口,悬浮于标题栏下方,既可以通过文本框进行筛选,也可以通过筛选按钮弹出右键菜单,选择具体筛选方式,截图如下所示:
选择筛选方式,弹出窗口,如下所示:
输入筛选条件,点击确定,或者取消筛选。如筛选学号里面包含2的,效果如下所示:
注意:以上筛选都是客户端筛选,不会修改数据源,也不会重连数据库。
核心源码
在本示例中,核心源码主要包含以下几个部分:
前端视图【MainWindow.xaml】源码
主要实现了按学号,姓名,年龄三列进行筛选,既可以单列筛选,又可以组合筛选。且三列的筛选实现方式一致,仅是绑定列有差异。
Windowx:xmlns=/winfx/2006/xaml/presentation
xmlns:x=/winfx/2006/xaml
xmlns:d=/expression/blend/2008
xmlns:mc=/markup-compatibility/2006
xmlns:local=clr-namespace:DemoDataGrid
mc:Ignorable=d
Title=DataGrid筛选示例Height=650Width=800
Window.Resources
ResourceDictionary
CollectionViewSourcex:Key=ItemsSourceSource={BindingPath=Students}/CollectionViewSource
CollectionViewSourcex:Key=NamesSource={BindingPath=Names}/CollectionViewSource
CollectionViewSourcex:Key=NosSource={BindingPath=Nos}/CollectionViewSource
CollectionViewSourcex:Key=AgesSource={BindingPath=Ages}/CollectionViewSource
Stylex:Key=ListBoxStyleTargetType={x:TypeListBox}
SetterProperty=ScrollViewer.CanContentScrollValue=True/Setter
SetterProperty=Template
Setter.Value
ControlTemplateTargetType={x:TypeListBox}
ScrollViewerx:Name=ScrollViewerCanContentScroll=True
ItemsPresenter/ItemsPresenter
/ScrollViewer
/ControlTemplate
/Setter.Value
/Setter
/Style
Geometryx:Key=Icon_Filter
M608864C588.8864576851.2576832L576448c0-6.46.4-19.212.8-25.6L787.2256c6.4-6.46.4-1