翻譯|使用教程|編輯:龔雪|2022-04-27 09:59:59.800|閱讀 200 次
概述:本文主要介紹DevExpress MVVM架構(gòu)下生成的POCO視圖模型,歡迎下載官方正式版體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
POCO(Plain Old CLR Objects)視圖模型簡化并加快了開發(fā)過程。
POCO 視圖模型允許您:
這允許您創(chuàng)建干凈、簡單、可維護(hù)和可測試的 MVVM 代碼,POCO 視圖模型與任何 WPF 控件完全兼容。
您可以使用在編譯時生成的視圖模型在編譯時為您的視圖模型生成樣板代碼。
POCO 機(jī)制為滿足以下所有要求的屬性生成可綁定屬性:
如果屬性沒有setter,則可以使用 RaisePropertyChanged 擴(kuò)展方法顯式引發(fā)該屬性的 PropertyChanged 事件。
您可以定義在屬性更改時調(diào)用的方法,這些方法名稱應(yīng)使用以下格式:On[PropertyName]Changed 和 On[PropertyName]Changing。
C#
public class LoginViewModel { public virtual string UserName { get; set; } protected void OnUserNameChanged() { //... } } public class LoginViewModel { public virtual string UserName { get; set; } protected void OnUserNameChanged(string oldValue) { //... } protected void OnUserNameChanging(string newValue) { //... } }
您可以使用 BindableProperty 屬性來:
C#
public class LoginViewModel { [BindableProperty(isBindable: false)] public virtual bool IsEnabled { get; set; } [BindableProperty(OnPropertyChangedMethodName = "Update")] public virtual string UserName { get; set; } protected void Update() { //... } }
您可以使用 Fluent API 來控制 POCO ViewModel 的生成。
C#
[MetadataType(typeof(Metadata))] public class LoginViewModel { public class Metadata : IMetadataProvider<LoginViewModel> { void IMetadataProvider<LoginViewModel>.BuildMetadata (MetadataBuilder<LoginViewModel> builder) { builder.Property(x => x.UserName). OnPropertyChangedCall(x => x.Update()); builder.Property(x => x.IsEnabled). DoNotMakeBindable(); } } public virtual bool IsEnabled { get; set; } public virtual string UserName { get; set; } protected void Update() { //... } }
POCO 機(jī)制為所有沒有參數(shù)或單個參數(shù)的公共方法生成命令,生成的命令名稱遵循 [MethodName]Command 模式,您可以使用 Command 屬性或 Fluent API 來控制命令生成機(jī)制。
C#
public class LoginViewModel { [Command(isCommand: false)] public void SaveCore() { //... } [Command(CanExecuteMethodName = "CanSaveAccountSettings", Name = "SaveCommand", UseCommandManager = true)] public void SaveAccountSettings(string fileName) { //... } public bool CanSaveAccountSettings(string fileName) { return !string.IsNullOrEmpty(fileName); } } [MetadataType(typeof(Metadata))] public class LoginViewModel { public class Metadata : IMetadataProvider<LoginViewModel> { void IMetadataProvider<LoginViewModel>.BuildMetadata(MetadataBuilder<LoginViewModel> builder) { builder.CommandFromMethod(x => x.SaveCore()). DoNotCreateCommand(); builder.CommandFromMethod(x => x.SaveAccountSettings(default(string))). CanExecuteMethod(x => x.CanSaveAccountSettings(default(string))). CommandName("SaveCommand"); } } public void SaveCore() { //... } public void SaveAccountSettings(string fileName) { //... } public bool CanSaveAccountSettings(string fileName) { return !string.IsNullOrEmpty(fileName); } }
要更新 POCO 視圖模型中自動生成的命令,請使用 DevExpress.Mvvm.POCO.POCOViewModelExtensions 類中提供的 RaiseCanExecuteChanged 擴(kuò)展方法。
C#
[POCOViewModel] public class ViewModel { public void GoBack(){ //... } public bool CanGoBack(){ //... } public void UpdateSaveCommand(){ this.RaiseCanExecuteChanged(c => c.GoBack()); } }
DevExpress WPF擁有120+個控件和庫,將幫助您交付滿足甚至超出企業(yè)需求的高性能業(yè)務(wù)應(yīng)用程序。通過DevExpress WPF能創(chuàng)建有著強(qiáng)大互動功能的XAML基礎(chǔ)應(yīng)用程序,這些應(yīng)用程序?qū)W⒂诋?dāng)代客戶的需求和構(gòu)建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產(chǎn)品,還是以數(shù)據(jù)為中心的商業(yè)智能產(chǎn)品,都能通過DevExpress WPF控件來實現(xiàn)。
DevExpress技術(shù)交流群6:600715373 歡迎一起進(jìn)群討論
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)