7

如果 TL;DR:请参阅最后一段。

纯 WPF “建议”将演示文稿(控件、文本、图标)放入视图并将命令逻辑(执行、CanExecute 方法)放入代码隐藏中。除了将逻辑放入视图 ( ) 和代码隐藏是一种不受欢迎的做法之外,它对XAML 复制CommandBindings毫无帮助:每次命令时都必须复制文本、图标、大图标、提示和许多其他属性用于:主菜单、上下文菜单、工具栏按钮、功能区按钮和其他控件。

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

但是,对于演示重复问题,我找不到普遍接受的解决方案。我想将命令表示(文本、图标)和命令逻辑ExecuteCanExecute方法)分开。我能找到的所有代码要么将演示文稿放入代码中(通过创建带有and之类的RoutedCommand附加属性的 a ),要么将代码放入演示文稿中(即,将处理程序放入视图和代码隐藏中)。我也不喜欢。我认为演示文稿应该完全在 XAML 中,代码应该完全在 CS 中(在 ViewModel 或 Controller 中)。LabelIcon

问题:如何分离视图(带有引用命令的控件的 XAML)、命令的表示(每个命令的标签、图标等)和命令的逻辑(ViewModel 或控制器中的 C# 代码等)ExecuteCanExecute

4

1 回答 1

4

这个问题没有内置的解决方案,您将不得不卷起袖子并自己创建所需的结构。

在我最近参与的一个项目中,我正是这样做的。我创建了一个名为“动作”的概念,它ICommand用其他视觉属性补充了 WPF。是这样的……

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

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

于 2012-11-24T18:59:02.657 回答