问题是为什么wpf控件只有一个命令?
我有这个问题,因为我正在创建自定义控件。我有两件事。要对viewmodel ICommand
属性进行绑定,我需要使用<i:Interaction.Triggers>
。我认为我可以创建几个命令,一个将使用我的控件的人将有一个选择使用事件代码隐藏或使用这些命令为mvvm。在这种情况下,没有人需要使用<i:Interaction.Triggers>
。
但据我所知,所有标准控件只有一个命令。我无法理解并找到答案为什么控件只有一个命令?为什么它是一个好的模式以及为什么控制多个命令是不好的?
答案 0 :(得分:2)
因为您只需需要一个命令。当然,它可能是一个阵列,但是99.99%的时候,这样可以获得更多的标记/麻烦。
在0.01%的情况下,你可以只有一个命令......触发几个其他命令(甚至只是几个方法)写一个CompositeCommand
类很简单,只留给程序员,很像DelegateCommand
。
在您的情况下,您说您有两个可命令绑定的唯一事件;这似乎完全没问题。它只是按钮只有一个有趣的事件(点击),足以支持命令。
答案 1 :(得分:2)
问题是为什么wpf控件只有一个命令?
没有规则必须将控件限制为单个命令。确实,按钮ICommandSource
只显示一个命令。对大多数控件来说都是有意义的,这些控制相对简单且只有一个责任。但是,复杂的控件当然可以定义多个。
Slider
声明并处理几个命令:
public static RoutedCommand IncreaseLarge { get; }
public static RoutedCommand DecreaseLarge { get; }
public static RoutedCommand IncreaseSmall { get; }
public static RoutedCommand DecreaseSmall { get; }
public static RoutedCommand MinimizeValue { get; }
public static RoutedCommand MaximizeValue { get; }
当然,Slider
不会通过实例级属性公开这些命令,因为没有理由允许它们被覆盖。它们都由滑块本身处理,它们都做同样的事情:它们改变了滑块的当前值。用户只希望在值发生变化时发生某些事情; 如何它改变它并不是非常相关。通常可以通过单个ValueChanged
事件传达重要信息。
我不能,在我的脑海中,想到 允许为每个实例分配多个命令的股票WPF控件。也就是说,我可以轻松设想这样的控件。例如,考虑一个带有向上和向下按钮的“旋转器”控件。虽然微调器上的向上/向下按钮可以用于操作滑块等单个标量值,但您可能决定以完全不同的方式使用它。例如,您可能希望向上/向下按钮的功能类似于电梯呼叫按钮。如果微调器公开单独的UpCommand
和DownCommand
,您将保留必要的灵活性以适应这两种情况。
如果您有自定义控件,并且认为定义多个命令是合适的,那么请继续。
RepeatButton
您在其中一条评论中提到过此用例:
我需要在按钮处于关闭状态时执行一些连续操作
WPF为此目的附带RepeatButton
控件。您已经看到它用于默认ScrollBar
模板中的箭头按钮。只需将Command
绑定到按钮处于按下状态时要重复的任何操作:
<RepeatButton Content="Hold to Repeat Command"
Command="{Binding YourRepetitiveCommand}" />