翻譯|產(chǎn)品更新|編輯:龔雪|2025-04-14 10:17:49.763|閱讀 152 次
概述:DevExpress .NET MAUI控件在新的v24.2中重點(diǎn)增強(qiáng)了MVVM功能,歡迎下載最新版體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DevExpress擁有.NET開發(fā)需要的所有平臺控件,包含600多個(gè)UI控件、報(bào)表平臺、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。屢獲大獎的軟件開發(fā)平臺DevExpress 今年第一個(gè)重要版本v23.1正式發(fā)布,該版本擁有眾多新產(chǎn)品和數(shù)十個(gè)具有高影響力的功能,可為桌面、Web和移動應(yīng)用提供直觀的解決方案,全面解決各種使用場景問題。
DevExpress .NET MAUI控件在新的v24.2中重點(diǎn)增強(qiáng)了MVVM功能,歡迎下載最新版體驗(yàn)!
DevExpress技術(shù)交流群11:749942875 歡迎一起進(jìn)群討論
DevExpress官方已經(jīng)開發(fā)了一個(gè)包含服務(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è)構(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ù)實(shí)現(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)中的一個(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)容的對話框,創(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ù)雜化。為了解決這個(gè)問題,我們引入了一個(gè)導(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ù),來幫助您指定保存文件的名稱和位置。它打開一個(gè)標(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包括一個(gè)用于觸發(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ù)是為跨整個(gè)應(yīng)用程序使用而設(shè)計(jì)的,如果您需要實(shí)現(xiàn)特定視圖與其視圖模型之間的通信邏輯,可以利用我們新的UI Service機(jī)制。這個(gè)新服務(wù)允許您直接從視圖模型與UI元素交互,而無需將代碼綁定到特定的元素類型。
例如,要強(qiáng)制CollectionView滾動到最后一個(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>
在視圖模型中,您可以通過服務(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ù)選型、個(gè)性化維保等服務(wù),幫助客戶實(shí)現(xiàn)技術(shù)合規(guī)、降本增效與風(fēng)險(xiǎn)可控。
慧都科技是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)化交互體驗(yàn)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:慧都網(wǎng)