嗨,我最近研究了WPF,并开始学习事件和命令。我通常在单击按钮时使用“命令”,这会导致一种方法在“ View 模型”中运行。
是否可以通过使用commnds使Button对其他事件做出响应,例如MouseOver事件?还是在这种情况下使用WPF事件?
如果要使用WPF事件,那么事件处理程序实现是否应该只调用 View 模型中的方法来保持关注?
最佳答案
这是一个公平的问题,也是MVVM体系结构领域中常见但“已解决”(有争议)的问题。如果使用的是MVVM框架,则可能会发现与EventToCommand Behavior类似的内容,here是MVVM Light Toolkit中的示例。
简而言之,这使您可以将事件映射到命令绑定(bind),如下所示:
<Rectangle Fill="White"
Stroke="Black"
Width="200"
Height="100">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<cmd:EventToCommand Command="{Binding TestCommand,
Mode=OneWay}"
CommandParameter="{Binding Text,
ElementName=MyTextBox,
Mode=OneWay}"
MustToggleIsEnabledValue="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Rectangle>
更新:
对于此问题,还有其他两个“合理”的解决方案:
使用here.发现的现在使用的旧版“AttachedCommandBehavior”扩展名
另一个有点恼人,但可行。
事件纯粹在 View 中。
表示您的命令的标识符
(也许在
查看)
通过反射和
传递命令参数。
这看起来很糟糕,但我可以肯定,实际上比使用传统命令要快一些
绑定(bind)。为了确保我需要查看IL,在这种情况下我认为这并不重要。
/更新
但是我想指出,这并不总是理想的情况。我发现很多时候,我使用EventToCommand来解决一个设计问题。请考虑以下几点:
最重要的也许是,您记得自己是开发人员。准则本身并不能解决问题,但是考虑准则可能会使问题的解决方案变得显而易见。
关于wpf - 何时在WPF中通过命令使用事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6098655/