1. 程式人生 > 其它 >看DevExpress WPF 檢視模型生成器是如何支援Prism & MVVM Light的

看DevExpress WPF 檢視模型生成器是如何支援Prism & MVVM Light的

複雜檢視中的檢視模型包含許多屬性、命令和重複的介面實現,為所有這些成員編寫程式碼不僅低效,而且可能會導致拼寫錯誤等。幸運的是,程式碼編寫不斷髮展,新技術可以讓您節省時間,保持程式碼庫緊湊、乾淨和可讀。編譯時生成器就是這樣一種技術,生成器在您輸入程式碼時無縫工作,甚至無需構建專案或執行任何操作即可生成程式碼。

DevExpress WPF v21.2正式版下載

DevExpress WPF的MVVM 程式碼生成器自動建立基於方法的命令、基於欄位的屬性,並實現 INotifyPropertyChanged、INotifyPropertyChanging、IDataErrorInfo、ISupportServices 和 ISupportParentViewModel 等介面。對於使用 DevExpress MVVM 框架的使用者來說,這是一個很好的補充。儘管如此,我們的元件也與其他 MVVM 框架相容,如果您使用的是 Prism 或 MVVM Light,仍然可以使用我們的程式碼生成器。

Prism程式碼生成器

Prism View Model程式碼生成器可幫助您使用所有基本檢視模型功能:命令、屬性和通知,它使用 Prism 的 DelegateCommand 類來生成命令。 除此之外,生成器可以自動實現 Prism 的 IActiveAware 介面,將 GenerateViewModel 分配給您的模型類並將 ImplementIActiveAware 設定為 true 就足夠了:

Base View Model

[GenerateViewModel(ImplementIActiveAware = true)]
partial class ViewModel {
// ...
void OnIsActiveChanged() {
// ...
}
}

Generated View Model

partial class ViewModel : INotifyPropertyChanged, IActiveAware {
// ...
bool isActive;
public bool IsActive {
get => isActive;
set {
isActive = value;
OnIsActiveChanged();
IsActiveChanged?.Invoke(this, EventArgs.Empty);
}
}
public event EventHandler? IsActiveChanged;
// ...
}

您需要宣告 DevExpress.Mvvm.CodeGenerators.Prism 名稱空間才能使用 Prism 程式碼生成器。

MVVM Light程式碼生成器

除了標準的檢視模型功能,MVVM 生成器可以自動建立一個 Messenger 並實現 ICleanup 介面:

Base View Model

[GenerateViewModel(ImplementICleanup = true)]
partial class ViewModel {
// ...
void OnCleanup() {
// ...
}
}

Generated View Model

partial class ViewModel : INotifyPropertyChanged, ICleanup {
// ...
protected IMessenger MessengerInstance { get; set; } = Messenger.Default;
public virtual void Cleanup() {
MessengerInstance.Unregister(this);
OnCleanup();
}
// ...
}

宣告 DevExpress.Mvvm.CodeGenerators.MvvmLight 名稱空間來將 View Model Generator 與 MVVM Light 一起使用。

DevExpress WPF | 下載試用

DevExpress WPF擁有120+個控制元件和庫,將幫助您交付滿足甚至超出企業需求的高效能業務應用程式。通過DevExpress WPF能建立有著強大互動功能的XAML基礎應用程式,這些應用程式專注於當代客戶的需求和構建未來新一代支援觸控的解決方案。 無論是Office辦公軟體的衍伸產品,還是以資料為中心的商業智慧產品,都能通過DevExpress WPF控制元件來實現。


DevExpress技術交流群6:600715373      歡迎一起進群討論

更多DevExpress線上公開課、中文教程資訊請上中文網獲取