DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力的功能,可为桌面、Web和移动应用提供直观的解决方案,全面解决各种使用场景问题。
DevExpress .NET MAUI控件在新的v24.2中重点增强了MVVM功能,欢迎下载最新版体验!
DevExpress技术交流群11:749942875 欢迎一起进群讨论
MVVM增强
DevExpress官方已经开发了一个包含服务、帮助程序和标记扩展的库,以便更容易地创建基于MVC的应用程序。目前没有创建自己的MVVM框架(就像为WPF和WinForms组件所做的那样),相反选择了Community Toolkit MVVM,DevExpress的库并没有取代它,而是用额外的功能增强了它。
服务
现在,您可以使用以下服务来简化MVVM的开发:
- 弹出对话框服务:打开预定义的或自定义的弹出对话框。
- NavigationService:直接从视图模型在页面之间导航。
- PrintService:启动默认的打印对话框来打印文件。
- SaveFilePicker:打开一个对话框,允许用户保存文件。
- UI服务:在不破坏MVVM的情况下与视图模型中的UI组件进行交互。
这些服务会自动添加到默认的依赖注入(DI)容器中,您只需要注册视图模型并定义一个构造函数,该构造函数接受相应的接口来访问视图模型中的服务。
C#
public class ViewModel { public ViewModel(INavigationService navigationService, IPrintService printService, ISaveFilePicker saveFilePickerService) { //navigationService.GoToAsync(...); //printService.PrintAsync(...); //saveFilePickerService.SaveAsync(...); } }
如果您喜欢使用自己的自定义服务实现,可以在DI容器中注册它来覆盖默认注册:
C#
public static class MauiProgram { public static MauiApp CreateMauiApp() { //... builder.Services.AddSingleton<INavigationService, NavigationServiceEx>(); } } public class NavigationServiceEx : NavigationService { }
弹出对话框服务
DevExpress的Popup Dialog Service(弹出对话框服务)可以很容易地显示预定义和自定义弹出对话框,该服务允许您根据用户点击的按钮返回结果。
以下是在弹出对话框服务中可用的预定义对话框:
- 带有文本、图标和按钮的警报。
- 带有自定义内容的警报。
- 有或没有取消按钮的操作表。
- 带有单选按钮和单一选择的操作表。
- 带有复选框和多个选择的操作表。

要使用这些对话框,只需通过依赖注入将IDXPopupService注入到视图模型中,并调用以下方法当中的一个:
下面是一个如何用图标显示警告的示例:
C#
public class PopupServiceDemoViewModel { readonly IDXPopupService PopupService; public PopupServiceDemoViewModel(IDXPopupService popupService) { PopupService = popupService; } Task ShowAlertWithIcon() { var res = await popupService.ShowAlert( settings: new DXPopupSettings() { Title = "Reset Settings ?", Message = "This will reset your app preferences back to their default settings.", TitleIcon = icon }, ok: "Accept", cancel: "Cancel"); } }
要显示带有自定义内容的对话框,创建自己的视图,将其注册到DI容器中并调用ShowPopup:
C#
builder.Services .AddTransient<LoginPopup>() .AddTransient<LoginPopupViewModel>; //… async Task ShowCustomPopup() { var vm = await popupService.ShowPopup<LoginPopupViewModel>(); }

导航服务
在.NET MAUI中,Shell.Current.GoToAsync方法允许您从任何类型导航到视图,但是直接从视图模型调用此方法会对Shell产生强烈的依赖性,这破坏了MVVM模式并使单元测试复杂化。为了解决这个问题,我们引入了一个导航服务,您可以将它注入到视图模型中,以一种对MVC友好的方式导航到其他视图:
C#
public class ViewModel { INavigationService NavigationService { get; } public ViewModel(INavigationService navigationService) { NavigationService = navigationService; } void ShowDetailForm() { var parameters = new Dictionary<string, object>(); parameters["NavigationParameter"] = NavigationParameter; NavigationService.GoToAsync("DetailView", parameters, false); } }
类似于标准的GoToAsync方法,NavigationService.GoToAsync允许您指定目标视图名称和导航参数。此外,您可以通过访问 CurrentLocation 属性获得当前视图。
SaveFilePicker服务
MVVM库包括SaveFilePicker服务,来帮助您指定保存文件的名称和位置。它打开一个标准对话框,允许用户选择保存文件的位置和方式:

像其他服务一样,您可以使用DI注入它,并从视图模型中使用:
C#
public class ViewModel { ISaveFilePicker SaveFilePicker { get; } public ViewModel(ISaveFilePicker saveFilePicker) { SaveFilePicker = saveFilePicker; } async Task Save() { await SaveFilePicker.SaveAsync(fileToSave, "HelloWorld.txt", PredefinedFileType.Any); } }
打印服务
v24.2包括一个用于触发打印对话框的服务,只需调用PrintAsync并将文档名称作为参数传递:
C#
public class PrintServiceDemoViewModel { IPrintService PrintService { get; } public PrintServiceDemoViewModel(IPrintService printService) { PrintService = printService; } async Task Print() { await PrintService.PrintAsync("BalanceSheet.pdf"); } }

UI服务
上面提到的MVVM服务是为跨整个应用程序使用而设计的,如果您需要实现特定视图与其视图模型之间的通信逻辑,可以利用我们新的UI Service机制。这个新服务允许您直接从视图模型与UI元素交互,而无需将代码绑定到特定的元素类型。
例如,要强制CollectionView滚动到最后一个元素,你可以创建一个调用DXCollectionView.ScrollTo的自定义服务:
C#
public interface IScollService { void ScrollToEnd(); } public class ScollService : UIServiceBase, IScollService { public void ScrollToEnd() { DXCollectionView collection = (DXCollectionView)AssociatedObject; collection.ScrollTo(collection.VisibleItemCount, DXScrollToPosition.End); } }
一旦完成,您可以把这个服务附加到DXCollectionView:
XML
<dx:DXCollectionView> <dx:DXCollectionView.Behaviors> <local:ScollService/> </dx:DXCollectionView.Behaviors> </dx:DXCollectionView>
在视图模型中,您可以通过服务容器访问注册的服务,并通过服务接口触发与UI相关的操作:
C#
public partial class ViewModel : IUIServiceClient { public IUIServiceContainer ServiceContainer { get; } = new UIServiceContainer(); void ShowLastItem() { var scrollService = ServiceContainer.GetRequiredService<IScollService>(); scrollService.ScrollToEnd(); } }
更多产品资讯及授权,欢迎来电咨询:023-68661681
更多DevExpress线上公开课、中文教程资讯请上中文网获取
关于慧都科技
慧都科技是专注软件工程、智能制造、石油工程三大行业的数字化解决方案服务商。在软件工程领域,我们提供开发控件、研发管理、代码开发、部署运维等软件开发全链路所需的产品,提供正版授权采购、技术选型、个性化维保等服务,帮助客户实现技术合规、降本增效与风险可控。
慧都科技是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5127.html