欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 界面控件DevExpress .NET MAUI v24.2亮点:MVVM功能增强

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

2025/4/18 16:02:50 来源:https://blog.csdn.net/AABBbaby/article/details/147240548  浏览:    关键词:界面控件DevExpress .NET MAUI v24.2亮点:MVVM功能增强

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

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

DevExpress v24.2正式版下载

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注入到视图模型中,并调用以下方法当中的一个:

  • ShowAlert
  • ShowActionSheet
  • ShowRadioOptionSheet
  • ShowCheckBoxOptionSheet

下面是一个如何用图标显示警告的示例:

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();
}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com