2024年终活动

DevExpress控件使用交流,DevExpress中国社区Dev联系电话 联系电话:023-68661681

界面控件DevExpress .NET MAUI v24.2亮点:MVVM功能增强

来源:   发布时间:2025-04-14   浏览:128次

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力的功能,可为桌面、Web和移动应用提供直观的解决方案,全面解决各种使用场景问题。

DevExpress .NET MAUI控件在新的v24.2中重点增强了MVVM功能,欢迎下载最新版体验!

DevExpress v24.2正式版下载

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(弹出对话框服务)可以很容易地显示预定义和自定义弹出对话框,该服务允许您根据用户点击的按钮返回结果。

以下是在弹出对话框服务中可用的预定义对话框:

  • 带有文本、图标和按钮的警报。
  • 带有自定义内容的警报。
  • 有或没有取消按钮的操作表。
  • 带有单选按钮和单一选择的操作表。
  • 带有复选框和多个选择的操作表。
DevExpress .NET MAUI v24.2新版本图集

要使用这些对话框,只需通过依赖注入将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>();
}
DevExpress .NET MAUI v24.2新版本图集
导航服务

在.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服务,来帮助您指定保存文件的名称和位置。它打开一个标准对话框,允许用户选择保存文件的位置和方式:

DevExpress .NET MAUI v24.2新版本图集

像其他服务一样,您可以使用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");
}
}
DevExpress .NET MAUI v24.2新版本图集
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
扫码咨询
电话咨询
023-68661681
返回
顶部