【问题标题】:How to implement Command with Tooltip in MVVM?如何在 MVVM 中使用 Tooltip 实现命令?
【发布时间】:2011-09-02 07:02:41
【问题描述】:

大多数 MVVM 框架都实现了基本的命令模式(例如 PRISM 中的 DelegateCommand),它使用 ViewModel 中的 Execute 和 CanExecute 方法。

但是,我经常需要在命令中添加工具提示。例如,我想描述一个命令的用途或解释它为什么被禁用。

目前我的工具提示是独立的,但这会导致样式定义的代码重复。

有没有办法将工具提示与 MVVM 命令模式集成?
我应该创建自己的 Command 类,还是认为这是不好的做法?

【问题讨论】:

    标签: wpf mvvm tooltip icommand


    【解决方案1】:

    我认为你的问题是完全正确的。我不知道这样的命令。 RoutedUICommand 是我能想到的最接近的,但它显然是路由的(对 MVVM 没有好处)并且只定义了一个 Text 属性 - 没有 ToolTip

    正如您所暗示的,您当然可以定义自己的。或者,您可以定义某种命令注册服务,从而模块注册ICommand 实现以及有关该命令的元数据(包括工具提示)。

    【讨论】:

      【解决方案2】:

      为什么不直接扩展 PRISM 的 'Delegate Command' 并添加一个 ToolTip 属性?

      public class DelegateCommandEx : DelegateCommand 
      {
          public string ToolTip { get; set; }
      }
      

      我相信默认情况下 WPF 命令不具有该属性,因为 ToolTip 在 WPF 中不必是字符串 - 它可以是对象、控件、一组控件等

      【讨论】:

        【解决方案3】:

        ICommand 是一种绑定到 MVVM 中 UI 引发的事件的方法。它没有ToolTip 属性,我看不出这有什么用,因为该命令充当处理程序并且没有UI。您是否指的是工具提示特定的命令,在这种情况下它确实有意义?

        通常你会在 WPF 中使用ToolTipService

        【讨论】:

        • ToolTipService 对我没有帮助,它太复杂了。我的意思是我的典型按钮有一个提示工具提示(简单的文本),你可能会说它是命令的文档,所以它可能是命令的一部分。
        • 在哪个框架中? ICommand
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多