翻譯|使用教程|編輯:龔雪|2022-08-09 10:46:29.137|閱讀 177 次
概述:本文主要介紹DevExpress MVVM架構下生成的POCO視圖模型,歡迎下載官方正式版體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
DevExpress WPF v21.1版本針對WPF產品線增強了一系列與MVVM相關的功能,這些增強功能使在 ViewModel 級別處理控制事件變得更加容易(您可以看到,技術團隊添加了多個命令屬性和多占的EventToCommand 操作功能)。
在以前的版本中,可以通過以下方式在 ViewModel 中處理事件:
這些技術不允許您指定返回值(例如,如果您需要為 ValidateCell 事件設置 e.IsValid),以前的版本要求您編寫復雜的操作或將與UI相關的事件參數傳遞給您的ViewModel。
從v21.1開始,技術團隊解決了這個限制并在幾個方面擴展了MVVM 支持。
在v21.1版本中,包含了多個旨在將ViewModel 的命令綁定到控件的屬性,這些屬性是期望返回值的事件的命令對應項:
ValidateRow event -> ValidateRowCommand property
CustomColumnDisplayText event -> CustomColumnDisplayTextCommand property
您不再需要編寫特殊的轉換器,ViewModel 獲得一個類型化的參數,該參數公開了與 UI 無關的事件參數,您可以在 ViewModel 級別修改此參數并將值返回給事件。考慮以下示例,其中WPF數據網格使用命令自定義單元格值:
<dxg:GridControl CustomColumnDisplayTextCommand="{Binding CalculateDisplayTextCommand}"/>
public class ViewModel: ViewModelBase { // ... [Command] public void CalculateDisplayText(ColumnDisplayTextArgs e) { if (e.FieldName == "Value") e.DisplayText = string.Format("{0:n2}", e.Value); } }
您可能知道,虛擬源的早期版本只能使用事件處理程序來實現數據操作。DevExpress官方收到了許多改進建議,要求改進ViewModel 級別的事件處理,從v21.1版本開始,您只需在 XAML 中聲明一個虛擬源并綁定其新命令屬性即可在 ViewModel 級別處理這些事件:
<dxg:GridControl.ItemsSource> <dxg:InfiniteAsyncSource ElementType="{x:Type local:IssueData}" FetchRowsCommand="{Binding FetchIssuesCommand}" GetTotalSummariesCommand="{Binding GetTotalSummariesCommand}" GetUniqueValuesCommand="{Binding GetUniqueValuesCommand}"> </dxg:InfiniteAsyncSource> </dxg:GridControl.ItemsSource>
您可以在 ViewModel 級別合并數據操作,而無需引入 UI 依賴項。 命令參數公開了一個獨立于平臺的 API,允許您將數據從 ViewModel 傳遞到數據網格:
public class ViewModel : ViewModelBase { // ... [Command] public void FetchIssues(DevExpress.Mvvm.Xpf.FetchRowsAsyncArgs args) { args.Result = GetIssuesAsync(args); } }
如果要處理沒有命令屬性的事件,可以使用 操作并手動將命令綁定到事件。
我們擴展了 EventToCommand 功能以允許您定義反向轉換邏輯,當您將事件參數傳遞給命令時,可以修改它們并根據需要將值返回給事件:
<dxe:TextEdit EditValue="{Binding UserName}"> <dxmvvm:Interaction.Behaviors> <dxmvvm:EventToCommand Command="{Binding UserNameValidationCommand}" EventArgsConverter="{local:ValidateEventArgsConverter}" EventName="Validate"/> </dxmvvm:Interaction.Behaviors> </dxe:TextEdit>
public class ValidationArgs { public string ErrorContent { get; private set; } public object Value { get; } public ValidationArgs(object value) => Value = value; public void SetError(bool isValid, string errorContent) => ErrorContent = isValid ? null : errorContent; } public class ValidateEventArgsConverter: EventArgsConverterBase<ValidationEventArgs> { protected override object Convert(object sender, ValidationEventArgs e) => new ValidationArgs(e.Value); protected override void ConvertBack(object sender, ValidationEventArgs e, object parameter) { var args = parameter as ValidationArgs; e.IsValid = args.ErrorContent == null; e.ErrorContent = args.ErrorContent; } }
DevExpress WPF擁有120+個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產品,還是以數據為中心的商業智能產品,都能通過DevExpress WPF控件來實現。
DevExpress技術交流群6:600715373 歡迎一起進群討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網