WPF應用介面開發新風向 - 如何支援.NET Core & .NET 5
DevExpress WPF擁有120+個控制元件和庫,將幫助您交付滿足甚至超出企業需求的高效能業務應用程式。通過DevExpress WPF能建立有著強大互動功能的XAML基礎應用程式,這些應用程式專注於當代客戶的需求和構建未來新一代支援觸控的解決方案。
2021中國區首發 · DevExpress v21.1新版釋出會報名開啟,名額有限先到先得哦~
DevExpress WPF v21.1 正式版日前已釋出,DevExpress影象庫現在可用於 .NET Core 和 .NET 5、升級MVVM功能等,歡迎點選下載最新版體驗!
DevExpress v21.1完整版下載.NET Core & .NET 5
XAML 設計器 - 建議操作
建議操作現在在Visual Studio Preview 版本中可用,幷包括以下新功能:
- 支援非可視元素(工具欄和功能區專案、資料網格列)
- 支援巢狀元素(例如,GridControl 現在可以使用 TableView 選項)
- 新屬性編輯器
- 外觀標籤
XAML 設計器 – 影象庫
DevExpress影象庫現在可用於 .NET Core 和 .NET 5,影象庫包括數千個高質量的光柵和向量圖示 (SVG)。 可以通過Suggested Actions、Properties視窗和Visual Studio 的主選單訪問該庫。
MVVM
編譯時 ViewModel 生成
此功能使用 .NET 5 中引入的 C# 原始碼生成器在編譯時為您的 ViewModel 生成樣板程式碼。 命令宣告、屬性更改通知、IDataErrorInfo 實現和服務支援將自動新增連結到ViewModel 的分部類。
C#
// manual part using DevExpress.Mvvm.CodeGenerators; [GenerateViewModel] public partial class ViewModel { [GenerateProperty] int _Count; [GenerateCommand] public void Increment() => Count++; } // generated part partial class ViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(PropertyChangedEventArgs e) => PropertyChanged?.Invoke(this, e); public int Count { get => _Count; set { if(EqualityComparer<int>.Default.Equals(_Count, value)) return; _Count = value; RaisePropertyChanged(CountChangedEventArgs); } } DelegateCommand incrementCommand; public DelegateCommand IncrementCommand { get => incrementCommand ??= new DelegateCommand(Increment, null, true); } static PropertyChangedEventArgs CountChangedEventArgs = new PropertyChangedEventArgs(nameof(Count)); }
編譯時程式碼生成共享與執行時生成的 POCO ViewModel 和標準 ViewModelBase 後代相關的好處:
- ViewModel 沒有重複的樣板程式碼
- 生成的程式碼儲存在部分類中,您可以輕鬆檢視和除錯程式碼
- ViewModel 類在設計時和執行時是相同的
- 最佳執行時效能,因為類是提前生成的
EventToCommand - 事件引數返回轉換
將事件引數傳遞給命令時,您可以定義反向轉換邏輯並將值從命令返回到事件:
XAML
<dxe:TextEdit> <dxmvvm:Interaction.Behaviors> <dxmvvm:EventToCommand EventName="Validate" Command="{Binding ValidateCommand}" EventArgsConverter={local:ValidateEventArgsConverter} /> </dxmvvm:Interaction.Behaviors> </dxe:TextEdit>
C#
public class ValidateEventArgsConverter : EventArgsConverterBase<ValidationEventArgs> { protected override void ConvertBack(object sender, ValidationEventArgs args, object parameter) { if (parameter is ValidationInfo info && info.IsValid) args.SetError(info.ErrorContent, info.ErrorType); } ... }
當事件需要返回值並且特定於 UI 的事件引數無法傳遞給 ViewModel 時,這應該會簡化這種情況。 此類事件的示例包括驗證、自定義排序、自定義顯示文字等。
DevExpress技術交流群3:700924826歡迎一起進群討論