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