2021 WPF应用开发有哪些新变化?这个工具的最新功能值得了解
DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。
DevExpress WPF v21.1 正式版日前已发布,DevExpress图像库现在可用于 .NET Core 和 .NET 5、升级MVVM功能等,欢迎点击下载最新版体验!
.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 欢迎一起进群讨论