翻譯|使用教程|編輯:龔雪|2022-08-09 10:46:29.137|閱讀 177 次
概述:本文主要介紹DevExpress MVVM架構(gòu)下生成的POCO視圖模型,歡迎下載官方正式版體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DevExpress WPF v21.1版本針對(duì)WPF產(chǎn)品線增強(qiáng)了一系列與MVVM相關(guān)的功能,這些增強(qiáng)功能使在 ViewModel 級(jí)別處理控制事件變得更加容易(您可以看到,技術(shù)團(tuán)隊(duì)添加了多個(gè)命令屬性和多占的EventToCommand 操作功能)。
在以前的版本中,可以通過以下方式在 ViewModel 中處理事件:
這些技術(shù)不允許您指定返回值(例如,如果您需要為 ValidateCell 事件設(shè)置 e.IsValid),以前的版本要求您編寫復(fù)雜的操作或?qū)⑴cUI相關(guān)的事件參數(shù)傳遞給您的ViewModel。
從v21.1開始,技術(shù)團(tuán)隊(duì)解決了這個(gè)限制并在幾個(gè)方面擴(kuò)展了MVVM 支持。
在v21.1版本中,包含了多個(gè)旨在將ViewModel 的命令綁定到控件的屬性,這些屬性是期望返回值的事件的命令對(duì)應(yīng)項(xiàng):
ValidateRow event -> ValidateRowCommand property
CustomColumnDisplayText event -> CustomColumnDisplayTextCommand property
您不再需要編寫特殊的轉(zhuǎn)換器,ViewModel 獲得一個(gè)類型化的參數(shù),該參數(shù)公開了與 UI 無關(guān)的事件參數(shù),您可以在 ViewModel 級(jí)別修改此參數(shù)并將值返回給事件。考慮以下示例,其中WPF數(shù)據(jù)網(wǎng)格使用命令自定義單元格值:
<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); } }
您可能知道,虛擬源的早期版本只能使用事件處理程序來實(shí)現(xiàn)數(shù)據(jù)操作。DevExpress官方收到了許多改進(jìn)建議,要求改進(jìn)ViewModel 級(jí)別的事件處理,從v21.1版本開始,您只需在 XAML 中聲明一個(gè)虛擬源并綁定其新命令屬性即可在 ViewModel 級(jí)別處理這些事件:
<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 級(jí)別合并數(shù)據(jù)操作,而無需引入 UI 依賴項(xiàng)。 命令參數(shù)公開了一個(gè)獨(dú)立于平臺(tái)的 API,允許您將數(shù)據(jù)從 ViewModel 傳遞到數(shù)據(jù)網(wǎng)格:
public class ViewModel : ViewModelBase { // ... [Command] public void FetchIssues(DevExpress.Mvvm.Xpf.FetchRowsAsyncArgs args) { args.Result = GetIssuesAsync(args); } }
如果要處理沒有命令屬性的事件,可以使用 操作并手動(dòng)將命令綁定到事件。
我們擴(kuò)展了 EventToCommand 功能以允許您定義反向轉(zhuǎn)換邏輯,當(dāng)您將事件參數(shù)傳遞給命令時(shí),可以修改它們并根據(jù)需要將值返回給事件:
<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+個(gè)控件和庫,將幫助您交付滿足甚至超出企業(yè)需求的高性能業(yè)務(wù)應(yīng)用程序。通過DevExpress WPF能創(chuàng)建有著強(qiáng)大互動(dòng)功能的XAML基礎(chǔ)應(yīng)用程序,這些應(yīng)用程序?qū)W⒂诋?dāng)代客戶的需求和構(gòu)建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產(chǎn)品,還是以數(shù)據(jù)為中心的商業(yè)智能產(chǎn)品,都能通過DevExpress WPF控件來實(shí)現(xiàn)。
DevExpress技術(shù)交流群6:600715373 歡迎一起進(jìn)群討論
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)