.NET 7框架中的命令绑定预览功能
.NET 7框架引入了命令绑定预览功能,旨在现代化Windows Forms应用程序。这些新特性允许UI控件像其他.NET UI框架(如MAUI)一样绑定到视图模型和命令。
主要变化
ButtonBase类新增Command属性:允许按钮绑定到命令。ToolStripItem类新增Command属性:允许工具栏项绑定到命令。Control类新增DataContext属性:作为环境属性,如果未设置,则从父控件中获取。
优势
- 解耦UI与业务逻辑:开发者可以使用ViewModel或控制器来分离UI和业务逻辑。
- 简化单元测试:可以分别测试逻辑和UI。
- 与现代ORM工具对齐:与Entity Framework Core生成的模型兼容,无需依赖
DataTable或DataSet类。 - Visual Studio Forms Designer支持:自动创建必要的绑定和绑定集合,支持绑定到具有属性和命令的对象。
命令属性支持
ICommand接口:支持Execute、CanExecute方法和CanExecuteChanged事件。- 点击按钮时,调用相关命令的
Execute方法。 - 如果命令的
CanExecute方法返回false,按钮将被禁用。
- 点击按钮时,调用相关命令的
- 自定义命令类:开发者可以在ViewModel中创建自己的派生命令类,或使用社区.NET Toolkit中的
RelayCommand类和代码生成器,减少样板代码。
背景与历史
Windows Forms曾因简化Windows GUI应用程序的开发而受到业务应用开发者的欢迎,但也导致了维护混乱,因为窗体代码隐藏类中混合了UI代码、业务逻辑代码甚至数据库连接代码。
后来的.NET UI框架(如WPF、UWP和MAUI)引入了新的设计模式,将领域特定代码从UI(现称为View)中移除,并添加到称为ViewModel的专用组件中。在MVVM模式(Model-View-ViewModel)中,ViewModel负责处理数据和执行业务逻辑代码,使用.NET属性绑定到UI,并利用INotifyPropertyChanged接口来通知属性变化。
Windows Forms支持绑定到数据源,可以是ADO.NET中的DataSet/DataTable,也可以是对象(自.NET Framework 2.0起)。虽然对象数据源可以解耦数据与UI层,但非数据更新的用户UI交互(如按钮点击)仍留在Windows Forms代码隐藏文件中。此外,将数据源传播到窗体上的子控件也很困难,因为Windows Forms绑定是控件特定的。
未来发展
2021年5月,Windows Forms项目在GitHub上提出了一个新的API提案,呼吁为按钮添加命令绑定支持,并为窗体或用户控件添加集中化的DataContext属性。到2022年8月,该功能基本完成,并在.NET 7中以预览版发布。预计2023年11月发布的.NET 8将默认包含这些功能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。