c# – 分离视图,命令演示(文本,图标)和命令逻辑(Execute,CanExecute)

前端之家收集整理的这篇文章主要介绍了c# – 分离视图,命令演示(文本,图标)和命令逻辑(Execute,CanExecute)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果TL; DR:见最后一段.

Pure WPF“建议”将表示(控件,文本,图标)放入视图和命令逻辑(Execute,CanExecute方法)到代码隐藏中.除了将逻辑放入视图(CommandBindings)和代码隐藏是一个不受欢迎的实践之外,它对XAML重复没有任何帮助:文本,图标,大图标,提示和许多其他属性必须每次复制使用命令:用于主菜单,用于上下文菜单,用于工具栏按钮,用于功能区按钮和其他控件.

看起来第一个问题(真正分离视图和逻辑)是通过DelegateCommand,RelayCommand和类似方法解决的.命令逻辑被移动到viewmodels(或MVVMC中的控制器),代码隐藏是干净的,视图中没有CommandBindings和其他废话.

但是,我找不到一个普遍接受的演示文稿重复问题的解决方案.我想分离命令演示(文本,图标)和命令逻辑(Execute,CanExecute方法).我可以找到的所有代码都将表示放入代码中(通过创建带有Label和Icon等附加属性的RoutedCommand),或者将代码放入表示中(即处理程序进入视图和代码隐藏).我也不喜欢.我认为演示文稿应完全在XAML中,代码应完全在CS中(在viewmodel或Controller中).

问题:如何分离视图(XAML与引用命令的控件),命令的显示(每个命令的标签,图标等)和命令逻辑(viewmodel或Controllers中的Execute,CanExecute等的C#代码)?

解决方法

这个问题没有内置的解决方案,你必须自己卷起袖子并自己创建所需的结构.

在我最近的一个项目中,我做到了这一点.我创建了一个名为’action’的概念,它补充了WPF ICommand和其他视觉属性.这是这样的……

interface IAction
{
  ICommand Command { get; }
  string DisplayText { get; }
  string ToolTipText{ get; }
  URI Icon { get; }
}

该应用程序包含一组Action实例.然后可以将它们绑定到菜单,工具栏等……允许相同的Action实例重复使用各种不同的呈现样式.这一切都是相当简单的MVVM东西!

猜你在找的C#相关文章