翻譯|產品更新|編輯:龔雪|2025-04-14 10:17:49.763|閱讀 138 次
概述:DevExpress .NET MAUI控件在新的v24.2中重點增強了MVVM功能,歡迎下載最新版體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
DevExpress擁有.NET開發需要的所有平臺控件,包含600多個UI控件、報表平臺、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。屢獲大獎的軟件開發平臺DevExpress 今年第一個重要版本v23.1正式發布,該版本擁有眾多新產品和數十個具有高影響力的功能,可為桌面、Web和移動應用提供直觀的解決方案,全面解決各種使用場景問題。
DevExpress .NET MAUI控件在新的v24.2中重點增強了MVVM功能,歡迎下載最新版體驗!
DevExpress技術交流群11:749942875 歡迎一起進群討論
DevExpress官方已經開發了一個包含服務、幫助程序和標記擴展的庫,以便更容易地創建基于MVC的應用程序。目前沒有創建自己的MVVM框架(就像為WPF和WinForms組件所做的那樣),相反選擇了Community Toolkit MVVM,DevExpress的庫并沒有取代它,而是用額外的功能增強了它。
現在,您可以使用以下服務來簡化MVVM的開發:
這些服務會自動添加到默認的依賴注入(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容器中并調用:
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允許您指定目標視圖名稱和導航參數。此外,您可以通過訪問 屬性獲得當前視圖。
MVVM庫包括服務,來幫助您指定保存文件的名稱和位置。它打開一個標準對話框,允許用戶選擇保存文件的位置和方式:
像其他服務一樣,您可以使用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包括一個用于觸發打印對話框的服務,只需調用并將文檔名稱作為參數傳遞:
C#
public class PrintServiceDemoViewModel { IPrintService PrintService { get; } public PrintServiceDemoViewModel(IPrintService printService) { PrintService = printService; } async Task Print() { await PrintService.PrintAsync("BalanceSheet.pdf"); } }
上面提到的MVVM服務是為跨整個應用程序使用而設計的,如果您需要實現特定視圖與其視圖模型之間的通信邏輯,可以利用我們新的UI Service機制。這個新服務允許您直接從視圖模型與UI元素交互,而無需將代碼綁定到特定的元素類型。
例如,要強制CollectionView滾動到最后一個元素,你可以創建一個調用的自定義服務:
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作為用戶界面領域的優秀產品,幫助企業高效構建權限管理、數據可視化(如網格/圖表/儀表盤)、跨平臺系統(WinForms/ASP.NET/.NET MAUI)及行業定制解決方案,加速開發并強化交互體驗。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網