网站建设的新闻推广app的平台

张小明 2026/1/1 3:17:16
网站建设的新闻,推广app的平台,lnmp wordpress 邮件,seo深圳优化本文主要用于介绍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进行投诉反馈,一经查实,立即删除!

承德市外贸网站建设比特币支付网站建设

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2025/12/29 10:05:25 网站建设

网站建设哪里济南seo网站优化公司

手把手教你打造专业级Python上位机:从串口通信到实时绘图全实战你有没有遇到过这样的场景?手头有个STM32板子,传感器数据哗哗地往外冒,可你想看波形得靠串口助手一行行翻;调试电机控制时,参数改一次就要重新…

张小明 2025/12/29 10:05:57 网站建设

无锡知名网站软装设计网络课程

我有一支技术全面、经验丰富的小型团队,专注高效交付中等规模外包项目,有需要外包项目的可以联系我刚开始学前端那会儿,我最崩溃的一件事不是写不出组件,而是——样式根本“养不住”。同一个项目里:这个页面按钮间距是…

张小明 2025/12/29 10:05:29 网站建设

站长平台网站怎么做代刷网站教程

导语 【免费下载链接】Hunyuan-4B-Instruct-AWQ-Int4 腾讯开源 Hunyuan-4B-Instruct-AWQ-Int4,高效大语言模型4B参数版,支持256K超长上下文,混合推理模式灵活切换,优化Agent任务性能领先。采用GQA架构与Int4量化,兼顾强…

张小明 2025/12/29 10:40:33 网站建设

长春商城网站开发网页访问wordpress

Tuya-Local终极配置指南:彻底告别云端依赖的本地智能家居方案 【免费下载链接】tuya-local Local support for Tuya devices in Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/tu/tuya-local 还在为涂鸦设备频繁断线、响应延迟而烦恼吗&…

张小明 2025/12/29 10:05:28 网站建设

药品网站建设前端工程师招聘

Wallpaper Engine资源提取终极指南:免费开源工具快速解锁壁纸素材 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 想要获取Wallpaper Engine中的精美壁纸素材&#xff1…

张小明 2025/12/29 10:05:27 网站建设