Win Application Framework (WAF)命令模式完整教程DelegateCommand与AsyncDelegateCommand【免费下载链接】wafWin Application Framework (WAF) is a lightweight Framework that helps you to create well structured XAML Applications.项目地址: https://gitcode.com/gh_mirrors/waf/wafWin Application Framework (WAF) 是一个轻量级框架专为创建结构良好的 XAML 应用程序设计。其中DelegateCommand和AsyncDelegateCommand是实现命令模式的核心组件它们通过委托机制将Execute和CanExecute方法与业务逻辑解耦极大提升了代码的可维护性和测试性。为什么选择 WAF 的命令实现WAF 提供的命令实现具有以下优势轻量级设计无需复杂配置即可快速集成完整的 ICommand 支持完美兼容 XAML 绑定系统异步友好AsyncDelegateCommand专门处理异步操作线程安全自动管理命令状态和 UI 线程交互DelegateCommand同步命令基础DelegateCommand是 WAF 中最基础的命令实现位于 src/System.Waf/System.Waf/System.Waf.Core/Applications/DelegateCommand.cs。它允许你将命令逻辑委托给方法实现简单的同步操作。基本用法创建一个简单的命令只需提供执行逻辑var saveCommand new DelegateCommand(SaveData); private void SaveData() { // 保存数据的业务逻辑 }带参数的命令如需处理参数可使用带参数的构造函数var deleteCommand new DelegateCommandobject(DeleteItem); private void DeleteItem(object parameter) { var itemId parameter as string; // 根据 ID 删除项目 }条件执行通过canExecute参数控制命令是否可执行var submitCommand new DelegateCommand(SubmitForm, CanSubmit); private bool CanSubmit() { return !string.IsNullOrEmpty(username) !string.IsNullOrEmpty(password); }状态更新当条件变化时使用RaiseCanExecuteChanged更新命令状态private void OnUsernameChanged() { submitCommand.RaiseCanExecuteChanged(); }AsyncDelegateCommand异步操作处理对于需要处理异步操作的场景src/System.Waf/System.Waf/System.Waf.Core/Applications/AsyncDelegateCommand.cs 提供了完美解决方案。它会在异步操作期间自动禁用命令防止重复执行。基本异步命令var loadDataCommand new AsyncDelegateCommand(LoadDataAsync); private async Task LoadDataAsync() { data await dataService.GetItemsAsync(); // 更新 UI 绑定属性 }带参数的异步命令var downloadFileCommand new AsyncDelegateCommandUri(DownloadFileAsync); private async Task DownloadFileAsync(Uri uri) { await fileService.DownloadAsync(uri); }结合条件执行var importCommand new AsyncDelegateCommand(ImportDataAsync, CanImport); private bool CanImport() { return !isImporting selectedFile ! null; }高级技巧命令状态管理WAF 提供了便捷的方式管理多个命令的状态// 同时更新多个命令的可执行状态 DelegateCommand.RaiseCanExecuteChanged(saveCommand, deleteCommand);对于禁用状态的命令可使用预定义的DisabledCommandvar disabledCommand DelegateCommand.DisabledCommand; // 或 var disabledAsyncCommand AsyncDelegateCommand.DisabledCommand;单元测试支持WAF 命令设计考虑了可测试性在测试项目中可以轻松验证命令行为[Test] public void DelegateCommand_Execute() { bool executed false; var command new DelegateCommand(() executed true); command.Execute(null); Assert.IsTrue(executed); }异步命令测试同样简单[Test] public async Task AsyncDelegateCommand_ExecuteAsync() { bool executed false; var command new AsyncDelegateCommand(() { executed true; return Task.CompletedTask; }); await command.ExecuteAsync(null); Assert.IsTrue(executed); }实际应用场景WAF 命令在 XAML 应用程序中有着广泛应用按钮交互绑定到 Button 的 Command 属性菜单命令实现菜单项的点击逻辑数据操作处理保存、删除等数据操作导航控制实现页面间的导航逻辑异步加载处理数据的异步加载和显示通过 WAF 的DelegateCommand和AsyncDelegateCommand你可以构建出更加清晰、可维护的 XAML 应用程序架构将 UI 交互与业务逻辑完美分离。要开始使用 WAF只需克隆仓库git clone https://gitcode.com/gh_mirrors/waf/waf探索 src/System.Waf/System.Waf/System.Waf.Core/Applications/ 目录下的命令实现源码了解更多高级特性和最佳实践。【免费下载链接】wafWin Application Framework (WAF) is a lightweight Framework that helps you to create well structured XAML Applications.项目地址: https://gitcode.com/gh_mirrors/waf/waf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考