如何解决何时在WPF中通过命令使用事件?
| 嗨,我最近研究了WPF,并开始学习事件和命令。我通常使用“单击按钮时的命令”,这会导致一种方法在“视图模型”中运行。 是否可以通过使用commnds使Button对其他事件做出响应,例如MouSEOver事件?还是在这种情况下使用WPF事件? 如果要使用WPF事件,那么事件处理程序实现是否应该只调用视图模型中的方法来保持关注?解决方法
这是一个公平的问题,并且是MVVM体系结构领域中常见但仍“有待解决”(有争议)的问题。如果您使用的是MVVM框架,则可能会发现与EventToCommand Behavior类似的内容,这是MVVM Light Toolkit中的示例。
简而言之,这使您可以将事件映射到命令绑定,如下所示:
<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 \”扩展名。
另一个有点恼人,但可行。
通过en捕获命令
事件纯粹在视图中。
查询控件的数据源步骤
抓取字符串绑定目标
表示您的命令的标识符
(也许在
视图)
在上调用您的命令
通过反射和
传递命令参数。
这看起来很糟糕,但我可以肯定地说,实际上比使用传统命令要快一些
绑定。为了确保我需要查看IL,在这种情况下我认为这并不重要。
/更新
但是我想指出,这并不总是理想的情况。我发现很多时候,我使用EventToCommand来解决设计问题。请考虑以下几点:
使用后面的事件和代码来处理与用户界面有关的行为。
考虑在适当的情况下创建具有命令绑定的自定义控件,特别是如果您发现自己使用命令封装事件驱动的行为来设置绑定数据,然后将其反映在视图中。 (即根据与控件或类似控件的接近程度设置透明度值)
EventToCommand应该最有可能仅用于处理“类似于命令的”事件(双击等),而不用于处理反应性事件(鼠标悬停)。但是,没有什么可以防止这种情况。视需要实施。
最重要的也许是,您记得自己是开发人员。准则本身不能解决问题,但是考虑准则可能会使问题的解决方案变得显而易见。
,您可能想看一下这篇文章:
WPF命令与事件的优点/缺点
讨论事件和命令的不同用法。
至于其他事件的命令,您应该看一下MVVMLight Toolkit中的EventToCommand之类的东西,它使您可以将任何事件附加到视图模型中的命令。非常有用,尤其是如果您已经在使用MVVM Light(我强烈建议您使用)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。