wpf sqlsugar handycontrol mvvm分页

时间: 2023-10-14 17:04:48 浏览: 50
WPF是一种基于XAML的用户界面框架,用于创建桌面应用程序。SQLSugar是一个ORM框架,可以帮助开发人员更轻松地访问和管理数据库。HandyControl是一个WPF控件库,提供了一些常用的界面控件和样式。MVVM是一种设计模式,用于将应用程序的用户界面和业务逻辑分离开来,使得代码更加清晰易懂。 在WPF应用程序中使用SQLSugar可以帮助您更方便地访问和管理数据库数据。使用HandyControl可以快速地创建漂亮的用户界面,并且这些控件都可以轻松地与MVVM模式集成。分页功能可以帮助您将大量数据分成多个页面,使得用户可以更方便地浏览和查找数据。 下面是一个使用WPF、SQLSugar、HandyControl和MVVM分页的示例: 1. 创建一个WPF应用程序,并在项目中安装SQLSugar和HandyControl包。 2. 创建一个名为“Models”的文件夹,并在其中创建一个名为“Person.cs”的类,用于定义人员模型。 ```csharp public class Person { [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public int Id { get; set; } [SugarColumn(Length = 50)] public string Name { get; set; } [SugarColumn(Length = 50)] public string Gender { get; set; } [SugarColumn(ColumnName = "BirthDate")] public DateTime? DateOfBirth { get; set; } [SugarColumn(Length = 50)] public string Address { get; set; } } ``` 3. 创建一个名为“ViewModels”的文件夹,并在其中创建一个名为“PersonViewModel.cs”的类,用于定义人员视图模型。 ```csharp public class PersonViewModel : BaseViewModel { private int _pageIndex = 1; private int _pageSize = 10; private int _totalCount; private List<Person> _personList; private Person _selectedPerson; public List<Person> PersonList { get { return _personList; } set { SetProperty(ref _personList, value); } } public Person SelectedPerson { get { return _selectedPerson; } set { SetProperty(ref _selectedPerson, value); } } public int PageIndex { get { return _pageIndex; } set { SetProperty(ref _pageIndex, value); } } public int PageSize { get { return _pageSize; } set { SetProperty(ref _pageSize, value); } } public int TotalCount { get { return _totalCount; } set { SetProperty(ref _totalCount, value); } } public ICommand FirstPageCommand { get; private set; } public ICommand PreviousPageCommand { get; private set; } public ICommand NextPageCommand { get; private set; } public ICommand LastPageCommand { get; private set; } public PersonViewModel() { FirstPageCommand = new RelayCommand(FirstPage); PreviousPageCommand = new RelayCommand(PreviousPage); NextPageCommand = new RelayCommand(NextPage); LastPageCommand = new RelayCommand(LastPage); LoadData(); } private void LoadData() { using (var db = new SqlSugarClient(new ConnectionConfig { ConnectionString = "your connection string" })) { var query = db.Queryable<Person>().OrderBy(p => p.Id); TotalCount = query.Count(); PersonList = query.Skip((PageIndex - 1) * PageSize).Take(PageSize).ToList(); } } private void FirstPage() { PageIndex = 1; LoadData(); } private void PreviousPage() { if (PageIndex > 1) { PageIndex--; LoadData(); } } private void NextPage() { if (PageIndex < TotalCount / PageSize + 1) { PageIndex++; LoadData(); } } private void LastPage() { PageIndex = TotalCount / PageSize + 1; LoadData(); } } ``` 4. 创建一个名为“Views”的文件夹,并在其中创建一个名为“PersonView.xaml”的视图,用于显示人员数据和分页控件。 ```xml <UserControl x:Class="WpfApp.Views.PersonView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:hc="clr-namespace:HandyControl.Controls;assembly=HandyControl" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:vm="clr-namespace:WpfApp.ViewModels" DataContext="{Binding PersonViewModel, Source={StaticResource Locator}}"> <Grid> <StackPanel> <DataGrid ItemsSource="{Binding PersonList}" SelectedItem="{Binding SelectedPerson}"> <DataGrid.Columns> <DataGridTextColumn Header="ID" Binding="{Binding Id}"/> <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> <DataGridTextColumn Header="Gender" Binding="{Binding Gender}"/> <DataGridTextColumn Header="Date of Birth" Binding="{Binding DateOfBirth}"/> <DataGridTextColumn Header="Address" Binding="{Binding Address}"/> </DataGrid.Columns> </DataGrid> <hc:Pager CurrentPage="{Binding PageIndex}" PageSize="{Binding PageSize}" TotalCount="{Binding TotalCount}"> <i:Interaction.Triggers> <i:EventTrigger EventName="FirstPageClick"> <i:InvokeCommandAction Command="{Binding FirstPageCommand}"/> </i:EventTrigger> <i:EventTrigger EventName="PreviousPageClick"> <i:InvokeCommandAction Command="{Binding PreviousPageCommand}"/> </i:EventTrigger> <i:EventTrigger EventName="NextPageClick"> <i:InvokeCommandAction Command="{Binding NextPageCommand}"/> </i:EventTrigger> <i:EventTrigger EventName="LastPageClick"> <i:InvokeCommandAction Command="{Binding LastPageCommand}"/> </i:EventTrigger> </i:Interaction.Triggers> </hc:Pager> </StackPanel> </Grid> </UserControl> ``` 5. 在App.xaml中添加以下代码,以便在应用程序中使用ViewModelLocator。 ```xml <Application.Resources> <ResourceDictionary> <vm:ViewModelLocator x:Key="Locator"/> </ResourceDictionary> </Application.Resources> ``` 6. 在MainWindow.xaml中使用PersonView。 ```xml <Window x:Class="WpfApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:views="clr-namespace:WpfApp.Views" Title="MainWindow" Height="450" Width="800"> <Grid> <views:PersonView/> </Grid> </Window> ``` 现在您已经可以运行应用程序并使用分页控件浏览人员数据了。

相关推荐

最新推荐

recommend-type

关于WPF异步MVVM等待窗体的介绍

本篇文章小编将为大家介绍,关于WPF异步MVVM等待窗体的介绍,需要的朋友参考下
recommend-type

wpf应用以及mvvm设计模式

文章详细解释了wpf的设计模式mvvm,使初学者能够快速的了解wpf设计优势以及特点
recommend-type

MVVM模式解析和在WPF中的实现

MVVM是Model、View、ViewModel的简写,这种模式的引入就是使用ViewModel来降低View和Model的耦合,说是降低View和Model的耦合。也可以说是是降低界面和逻辑的耦合,理想情况下界面和逻辑是完全分离的,单方面更改...
recommend-type

wpf经典入门教程.pdf

wpf入门教程。在学校了解过wpf但是并没有项目经验,拿来学,非常适合想要入门wpf开发并且有C#编程基础的童鞋
recommend-type

WPF实现窗体中的悬浮按钮

主要为大家详细介绍了WPF实现窗体中的悬浮按钮,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。