gpt4 book ai didi

wpf - 何时在 WPF 中对命令使用事件?

转载 作者:行者123 更新时间:2023-12-03 09:12:22 24 4
gpt4 key购买 nike

嗨,我最近研究了 WPF 并开始学习事件和命令。我通常在按钮单击时使用命令,这会导致方法在我的“ View 模型”中运行。

是否可以通过使用命令使 Button 对任何其他事件(例如 MouseOver 事件)使用react?或者在这种情况下会使用 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>

更新:

这个问题还有另外两个“合理”的解决方案:

一个使用现在被认为是遗留的“AttachedCommandBehavior”扩展名 here.

另一个有点刺激,但可行。
  • 通过 en 捕获命令
    事件纯粹在 View 中。
  • 查询控件的DataSource步骤
  • 获取字符串绑定(bind)目标
    表示您的命令的标识符
    (也许在
    查看)
  • 调用你的命令
    通过反射和 View 模型
    传入命令参数。

  • 这看起来很恶心,但我相当肯定它实际上比使用传统命令快一点
    绑定(bind)。为了确定我需要查看 IL,我认为在这种情况下这并不重要。

    /更新

    然而,我想指出,这并不总是理想的情况。我发现,我经常使用 EventToCommand 来解决设计问题。请考虑以下几点:
  • 使用事件和代码来处理用户界面相关的行为。
  • 考虑在适当的情况下创建具有命令绑定(bind)的自定义控件,特别是如果您发现自己使用命令来封装事件驱动的行为来设置绑定(bind)数据,然后反射(reflect)在 View 中。 (即根据与控件的接近度或类似的东西设置透明度值)
  • EventToCommand 很可能只用于处理“类似命令”的事件(双击等)而不是 react 事件(鼠标悬停)。然而,没有什么能阻止这一点。按照您认为合适的方式实现。

  • 最重要的也许是你记得你是开发者。指导方针本身并不能解决问题,但考虑指导方针可能会使问题的解决方案变得明显。

    关于wpf - 何时在 WPF 中对命令使用事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6098655/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com