张小明 2026/1/16 10:54:34
帝国后台网站如何设置自动刷新首,网站制作郑州网站制作,vuejs做视频网站,营销话术与技巧本文主要用于介绍WPF基于MVVM实现自定义分页控件的代码实现。 主要功能#xff1a; 自定义页码#xff0c;当前页/总页数, 上一页#xff0c;下一页#xff0c;返回首页#xff0c;返回最后一页#xff0c; 利用FontAwesome作为FontFamily实现icon的功能。
本代码中的Vi…本文主要用于介绍WPF基于MVVM实现自定义分页控件的代码实现。主要功能 自定义页码当前页/总页数, 上一页下一页返回首页返回最后一页 利用FontAwesome作为FontFamily实现icon的功能。本代码中的ViewModelBase的实现请参照另一篇文章WPF MVVM ViewModelBase造轮子实现类似MVVMLight的功能1. 创建PaginationControl1.1 Color BrushSolidColorBrush x:KeyHighlightBrush Color#E84315 / SolidColorBrush x:KeyDisabledForegroundBrush Color#888 /1.2 PaginationControl.xaml.cs不用更改任何代码1.3 PaginationControl.xamlUserControl x:ClassMES.UI.Views.CustomControls.PaginationControl xmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:xhttp://schemas.microsoft.com/winfx/2006/xaml xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:ihttp://schemas.microsoft.com/xaml/behaviors xmlns:localclr-namespace:MES.UI.Views.CustomControls mc:Ignorabled Height45 UserControl.Resources Style x:KeypaginationTB TargetType{x:Type TextBlock} Setter PropertyFontSize Value20/ Setter PropertyFontFamily Valuepack://application:,,,/Resources/#FontAwesome/ Setter PropertyMargin Value5,15,5,10/ Setter PropertyForeground Value{StaticResource HighlightBrush}/ Setter PropertyCursor ValueHand/ Style.Triggers Trigger PropertyIsEnabled ValueTrue Setter PropertyForeground Value{StaticResource HighlightBrush}/ /Trigger Trigger PropertyIsEnabled ValueFalse Setter PropertyForeground Value{StaticResource DisabledForegroundBrush}/ /Trigger /Style.Triggers /Style /UserControl.Resources StackPanel OrientationHorizontal VerticalAlignmentCenter TextBlock TextPage Size: Margin5,15,5,10/TextBlock ComboBox x:NamePageSizeComboBox ItemsSource{Binding PageSizes} SelectedItem{Binding PageSize} Width70 VerticalAlignmentCenter HorizontalAlignmentCenter/ TextBlock Style{StaticResource paginationTB} IsEnabled{Binding EnabledPreviousButton} Text#xf100; x:NamebtnFirstPage ToolTipFirst Page i:Interaction.Triggers i:EventTrigger EventNameMouseLeftButtonDown i:InvokeCommandAction Command{Binding FirstPageCommand}/ /i:EventTrigger /i:Interaction.Triggers /TextBlock TextBlock Style{StaticResource paginationTB} IsEnabled{Binding EnabledPreviousButton} Text#xf104; x:NamebtnPrevious ToolTipPreviouse i:Interaction.Triggers i:EventTrigger EventNameMouseLeftButtonDown i:InvokeCommandAction Command{Binding PreviousPageCommand}/ /i:EventTrigger /i:Interaction.Triggers /TextBlock TextBlock NametxtCurrentPageTextBlock Text{Binding CurrentPageText} Margin5,15,5,10 VerticalAlignmentCenter / TextBlock Style{StaticResource paginationTB} IsEnabled{Binding EnabledNextButton} Text#xf105; x:NamebtnNext ToolTipNext i:Interaction.Triggers i:EventTrigger EventNameMouseLeftButtonDown i:InvokeCommandAction Command{Binding NextPageCommand}/ /i:EventTrigger /i:Interaction.Triggers /TextBlock TextBlock Style{StaticResource paginationTB} IsEnabled{Binding EnabledNextButton} Text#xf101; x:NamebtnLastPage ToolTipLast Page i:Interaction.Triggers i:EventTrigger EventNameMouseLeftButtonDown i:InvokeCommandAction Command{Binding LastPageCommand}/ /i:EventTrigger /i:Interaction.Triggers /TextBlock /StackPanel /UserControl2. 创建PaginationControlViewModel/// summary/// Pagination Control ViewModel/// /summarypublicclassPaginationControlViewModel:ViewModelBase{#regionPagination paramtersprivateint_currentPage;privateint_totalItems;privateint_pageSize1;publicintTotalItems{get_totalItems;set{_totalItemsvalue;OnPropertyChanged(nameof(TotalItems));OnPropertyChanged(nameof(TotalPages));OnPropertyChanged(nameof(CurrentPageText));SetButtonStatus();}}publicintPageSize{get_pageSize;set{_pageSizevalue;OnPropertyChanged(nameof(PageSize));OnPageChanged();}}publicintCurrentPage{get_currentPage;set{if(_currentPage!value){_currentPagevalue;OnPropertyChanged(nameof(CurrentPage));OnPageChanged();}}}publicstringCurrentPageText{get{return$Page{CurrentPage}of{TotalPages};}}publicintTotalPages(TotalItemsPageSize-1)/PageSize;privateObservableCollectionint_pageSizes;publicObservableCollectionintPageSizes{get{return_pageSizes;}set{_pageSizesvalue;OnPropertyChanged(nameof(PageSizes));}}privatebool_enabledPreviousButton;publicboolEnabledPreviousButton{get{return_enabledPreviousButton;}set{_enabledPreviousButtonvalue;OnPropertyChanged(nameof(EnabledPreviousButton));}}privatebool_enabledNextButton;publicboolEnabledNextButton{get{return_enabledNextButton;}set{_enabledNextButtonvalue;OnPropertyChanged(nameof(EnabledNextButton));}}#endregionpublicICommandFirstPageCommand{get;}publicICommandPreviousPageCommand{get;}publicICommandNextPageCommand{get;}publicICommandLastPageCommand{get;}publiceventEventHandlerPageChanged;privateboolisInitializedfalse;// avoid call OnPageChanged in initialpublicPaginationControlViewModel(){_pageSizesnewObservableCollectionint{1,20,50,100,200,300,500};CurrentPage1;// Initialize to the first pagePageSizeAgencyCRMConstants.DefaultPageSize;FirstPageCommandnewRelayCommand(_CurrentPage1);PreviousPageCommandnewRelayCommand(_{if(CurrentPage1)CurrentPage--;});NextPageCommandnewRelayCommand(_{if(CurrentPageTotalPages)CurrentPage;});LastPageCommandnewRelayCommand(_CurrentPageTotalPages);isInitializedtrue;}protectedvirtualvoidOnPageChanged(){if(isInitialized){PageChanged?.Invoke(this,EventArgs.Empty);}}privatevoidSetButtonStatus(){if(isInitialized){if(CurrentPage1){EnabledPreviousButtontrue;}else{EnabledPreviousButtonfalse;}if(CurrentPage1CurrentPageTotalPages){EnabledNextButtontrue;}else{EnabledNextButtonfalse;}}else{EnabledNextButtonfalse;EnabledPreviousButtonfalse;}}}3. 调用3.1 在CompanyListViewModel中引用PaginationControlViewModelpublicclassCompanyListViewModel:ViewModelBase,IViewModelDispose{#regionAgency.CRM API UrlsprivateconststringGetByCompanyNameAsyncapi/Company/GetByCompanyName?CompanyName{0}pageNumber{1}pageSize{2};#endregion#regionModelsprivatereadonlyIMESHttpClientService_mesHttpClientService;privateBackgroundWorker_backgroundWorker;publicPaginationControlViewModelPaginationViewModel;privatestring?_CompanyName;publicstring?CompanyName{get{return_CompanyName;}set{_CompanyNamevalue;OnPropertyChanged(nameof(CompanyName));}}privatebool_isEnableExport;publicboolIsEnableExport{get{return_isEnableExport;}set{_isEnableExportvalue;OnPropertyChanged(nameof(IsEnableExport));}}privateCompanyDto?_selectedCompany;publicCompanyDto?SelectedCompany{get{return_selectedCompany;}set{_selectedCompanyvalue;OnPropertyChanged(nameof(SelectedCompany));}}privateObservableCollectionCompanyDto_CompanyList;publicObservableCollectionCompanyDtoCompanyList{get{return_CompanyList;}set{_CompanyListvalue;OnPropertyChanged(nameof(CompanyList));}}privateintpageSizeMESConstants.DefaultPageSize;privateintcurrentPage1;#endregion#regionctorpublicCompanyListViewModel(){_mesHttpClientServiceNInjectBase.Kernel.GetIMESHttpClientService();_CompanyListnew();_backgroundWorkernewBackgroundWorker();_backgroundWorker.DoWorkBackgroundWorker_DoWork;_backgroundWorker.RunWorkerCompletedBackgroundWorker_RunWorkerCompleted;InitialParameters();}privatevoidInitialParameters(){_CompanyNamestring.Empty;PaginationViewModelnewPaginationControlViewModel();PaginationViewModel.PageSizeMESConstants.DefaultPageSize;_selectedCompanynew();PaginationInitial();}#endregion#regionICommandspublicICommand?RefreshRecordsCommand{get{returnnewDelegateCommand((){RefreshRecords();});}}publicICommand?ResetFilterCommand{get{returnnewDelegateCommand((){ResetFilterFunction();});}}#endregion#regionFunctionsprivatevoidResetFilterFunction(){InitialParameters();RefreshRecords();}publicvoidRefreshRecords(){AppEvents.Instance.StartProgressBar(this,newProgressBarDisplayEventArgs(AppConstants.ProgressBarMessages.Generic.LOADING));_backgroundWorker.RunWorkerAsync(newListstring(){CompanyName,currentPage.ToString(),pageSize.ToString()});}privatevoidBackgroundWorker_RunWorkerCompleted(object?sender,RunWorkerCompletedEventArgse){if(e.Errornull){varresulte.ResultasPagedResultDtoCompanyDto;if(result!null){int.TryParse(result.TotalCount.ToString(),outvartotalCount);PaginationViewModel.TotalItemstotalCount;CompanyListresult.Items;this.IsEnableExportCompanyList?.Count0;}else{this.IsEnableExportfalse;}}AppEvents.Instance.StopProgressBar(this);}privatevoidBackgroundWorker_DoWork(object?sender,DoWorkEventArgse){try{varparameterse.ArgumentasListstring;if(parametersnull||parameters.Count!3)return;usingvarhttpClient_mesHttpClientService.GetHttpClient();stringurlWithParametersstring.Format(GetByCompanyNameAsync,parameters[0],parameters[1],parameters[2]);varresponsehttpClient.GetAsync(urlWithParameters).Result;if(response.IsSuccessStatusCode){varjsonresponse.Content.ReadAsStringAsync().Result;varresultJsonConvert.DeserializeObjectPagedResultDtoCompanyDto(json);e.Resultresult;}}catch(Exceptionex){Log.Error(Error loading CRM users,ex);}}publicvoidDisposeRecordsAndEvents(){CompanyListnew();_backgroundWorker.DoWork-BackgroundWorker_DoWork;_backgroundWorker.RunWorkerCompleted-BackgroundWorker_RunWorkerCompleted;_backgroundWorker.Dispose();PaginationDispose();}#endregion#regionPaginationprivatevoidPaginationInitial(){PaginationViewModelnew();PaginationViewModel.PageChangedPaginationControlViewModel_PageChanged;}privatevoidPaginationDispose(){PaginationViewModel.PageChanged-PaginationControlViewModel_PageChanged;}privatevoidPaginationControlViewModel_PageChanged(object?sender,EventArgse){pageSizePaginationViewModel.PageSize;currentPagePaginationViewModel.CurrentPage;RefreshRecords();}#endregion}3.2 CompanyList.xaml中添加PaginationControlCustomControls:PaginationControl x:NamepaginationControl/CustomControls:PaginationControl3.3 CompanyList.xaml.cs中为PaginationControl指定DataContextprivatevoidUserControl_Loaded(objectsender,System.Windows.RoutedEventArgse){paginationControl.DataContextViewModel.PaginationViewModel;ViewModel.RefreshRecords();}4. 最终实现效果
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
百度站长统计工具合肥网站营销推广
“选 AI 写论文像开盲盒?有的功能残缺,有的专业拉胯,有的违规踩雷?”🤔“5 款热门工具深度实测,到底哪款能做到‘功能、专业、合规、高效’全在线?”💥“横评结果颠覆认知࿱…
淮南网站建设好的公司中国世界排名第一的专业
还在为Android应用安装的各种限制而烦恼吗?InstallerX作为一款现代化的Android应用安装工具,能够帮你解决从基础安装到高级配置的所有问题。无论你是新手还是有一定经验的用户,这篇指南都将带你从零开始,逐步掌握这款强大工具的使…
网站建设纳千网络顺义石家庄网站建设
一份保险合同,承载着危难时刻对生命的郑重承诺。然而当意外真正降临,理赔之路却往往充满波折。保险公司一句"死因无法明确",就足以让尚在悲痛中的家庭陷入更深的无助。购买人身意外险,本是为生活增添一份安心。然而当被…
自己的网站怎么推广古交网站建设
在学术研究的浩瀚星空中,本科与硕士阶段的论文写作如同搭建一座知识金字塔,既需要扎实的基石,也需要精准的框架设计。面对海量文献的筛选、逻辑结构的搭建、学术语言的雕琢,许多学子常陷入“选题迷茫症”“文献梳理恐惧症”“逻辑…
岳阳网站设计公司网站海报做一张多少钱
Docker高级部署与调试全解析 1. 数据持久化中的用户权限问题 在容器启动时,卷会被挂载,脚本会在将命令传递给容器的原始运行器之前,将卷的用户和组更改为合适的用户和组,从而解决相关问题。在处理卷时,一定要注意用户权限,因为如果不小心,可能会导致可用性和安全问题。…