翻譯|產(chǎn)品更新|編輯:龔雪|2025-04-14 10:17:49.763|閱讀 138 次
概述:DevExpress .NET MAUI控件在新的v24.2中重點(diǎn)增強(qiáng)了MVVM功能,歡迎下載最新版體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DevExpress擁有.NET開發(fā)需要的所有平臺控件,包含600多個UI控件、報表平臺、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。屢獲大獎的軟件開發(fā)平臺DevExpress 今年第一個重要版本v23.1正式發(fā)布,該版本擁有眾多新產(chǎn)品和數(shù)十個具有高影響力的功能,可為桌面、Web和移動應(yīng)用提供直觀的解決方案,全面解決各種使用場景問題。
DevExpress .NET MAUI控件在新的v24.2中重點(diǎn)增強(qiáng)了MVVM功能,歡迎下載最新版體驗!
DevExpress技術(shù)交流群11:749942875 歡迎一起進(jìn)群討論
DevExpress官方已經(jīng)開發(fā)了一個包含服務(wù)、幫助程序和標(biāo)記擴(kuò)展的庫,以便更容易地創(chuàng)建基于MVC的應(yīng)用程序。目前沒有創(chuàng)建自己的MVVM框架(就像為WPF和WinForms組件所做的那樣),相反選擇了Community Toolkit MVVM,DevExpress的庫并沒有取代它,而是用額外的功能增強(qiáng)了它。
現(xiàn)在,您可以使用以下服務(wù)來簡化MVVM的開發(fā):
這些服務(wù)會自動添加到默認(rèn)的依賴注入(DI)容器中,您只需要注冊視圖模型并定義一個構(gòu)造函數(shù),該構(gòu)造函數(shù)接受相應(yīng)的接口來訪問視圖模型中的服務(wù)。
C#
public class ViewModel { public ViewModel(INavigationService navigationService, IPrintService printService, ISaveFilePicker saveFilePickerService) { //navigationService.GoToAsync(...); //printService.PrintAsync(...); //saveFilePickerService.SaveAsync(...); } }
如果您喜歡使用自己的自定義服務(wù)實現(xiàn),可以在DI容器中注冊它來覆蓋默認(rèn)注冊:
C#
public static class MauiProgram { public static MauiApp CreateMauiApp() { //... builder.Services.AddSingleton<INavigationService, NavigationServiceEx>(); } } public class NavigationServiceEx : NavigationService { }
DevExpress的Popup Dialog Service(彈出對話框服務(wù))可以很容易地顯示預(yù)定義和自定義彈出對話框,該服務(wù)允許您根據(jù)用戶點(diǎn)擊的按鈕返回結(jié)果。
以下是在彈出對話框服務(wù)中可用的預(yù)定義對話框:
要使用這些對話框,只需通過依賴注入將IDXPopupService注入到視圖模型中,并調(diào)用以下方法當(dāng)中的一個:
下面是一個如何用圖標(biāo)顯示警告的示例:
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"); } }
要顯示帶有自定義內(nèi)容的對話框,創(chuàng)建自己的視圖,將其注冊到DI容器中并調(diào)用:
C#
builder.Services .AddTransient<LoginPopup>() .AddTransient<LoginPopupViewModel>; //… async Task ShowCustomPopup() { var vm = await popupService.ShowPopup<LoginPopupViewModel>(); }
在.NET MAUI中,Shell.Current.GoToAsync方法允許您從任何類型導(dǎo)航到視圖,但是直接從視圖模型調(diào)用此方法會對Shell產(chǎn)生強(qiáng)烈的依賴性,這破壞了MVVM模式并使單元測試復(fù)雜化。為了解決這個問題,我們引入了一個導(dǎo)航服務(wù),您可以將它注入到視圖模型中,以一種對MVC友好的方式導(dǎo)航到其他視圖:
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); } }
類似于標(biāo)準(zhǔn)的GoToAsync方法,NavigationService.GoToAsync允許您指定目標(biāo)視圖名稱和導(dǎo)航參數(shù)。此外,您可以通過訪問 屬性獲得當(dāng)前視圖。
MVVM庫包括服務(wù),來幫助您指定保存文件的名稱和位置。它打開一個標(biāo)準(zhǔn)對話框,允許用戶選擇保存文件的位置和方式:
像其他服務(wù)一樣,您可以使用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包括一個用于觸發(fā)打印對話框的服務(wù),只需調(diào)用并將文檔名稱作為參數(shù)傳遞:
C#
public class PrintServiceDemoViewModel { IPrintService PrintService { get; } public PrintServiceDemoViewModel(IPrintService printService) { PrintService = printService; } async Task Print() { await PrintService.PrintAsync("BalanceSheet.pdf"); } }
上面提到的MVVM服務(wù)是為跨整個應(yīng)用程序使用而設(shè)計的,如果您需要實現(xiàn)特定視圖與其視圖模型之間的通信邏輯,可以利用我們新的UI Service機(jī)制。這個新服務(wù)允許您直接從視圖模型與UI元素交互,而無需將代碼綁定到特定的元素類型。
例如,要強(qiáng)制CollectionView滾動到最后一個元素,你可以創(chuàng)建一個調(diào)用的自定義服務(wù):
C#
public interface IScollService { void ScrollToEnd(); } public class ScollService : UIServiceBase, IScollService { public void ScrollToEnd() { DXCollectionView collection = (DXCollectionView)AssociatedObject; collection.ScrollTo(collection.VisibleItemCount, DXScrollToPosition.End); } }
一旦完成,您可以把這個服務(wù)附加到DXCollectionView:
XML
<dx:DXCollectionView> <dx:DXCollectionView.Behaviors> <local:ScollService/> </dx:DXCollectionView.Behaviors> </dx:DXCollectionView>
在視圖模型中,您可以通過服務(wù)容器訪問注冊的服務(wù),并通過服務(wù)接口觸發(fā)與UI相關(guān)的操作:
C#
public partial class ViewModel : IUIServiceClient { public IUIServiceContainer ServiceContainer { get; } = new UIServiceContainer(); void ShowLastItem() { var scrollService = ServiceContainer.GetRequiredService<IScollService>(); scrollService.ScrollToEnd(); } }
更多產(chǎn)品資訊及授權(quán),歡迎來電咨詢:023-68661681
慧都科技是專注軟件工程、智能制造、石油工程三大行業(yè)的數(shù)字化解決方案服務(wù)商。在軟件工程領(lǐng)域,我們提供開發(fā)控件、研發(fā)管理、代碼開發(fā)、部署運(yùn)維等軟件開發(fā)全鏈路所需的產(chǎn)品,提供正版授權(quán)采購、技術(shù)選型、個性化維保等服務(wù),幫助客戶實現(xiàn)技術(shù)合規(guī)、降本增效與風(fēng)險可控。
慧都科技是DevExpress的中國區(qū)的合作伙伴,DevExpress作為用戶界面領(lǐng)域的優(yōu)秀產(chǎn)品,幫助企業(yè)高效構(gòu)建權(quán)限管理、數(shù)據(jù)可視化(如網(wǎng)格/圖表/儀表盤)、跨平臺系統(tǒng)(WinForms/ASP.NET/.NET MAUI)及行業(yè)定制解決方案,加速開發(fā)并強(qiáng)化交互體驗。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)