如何将此事件处理程序转换为命令
本文关键字:程序转换 命令 事件处理 | 更新日期: 2024-10-19 09:36:46
private void GridSplitter_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
vm.positionX = e.GetPosition((sender as GridSplitter).Parent as UIElement).X;
}
父级是一个虚拟化堆栈面板。我有点理解命令背后的想法,但仍然无法理解如何实现它。此事件处理程序获取鼠标的 X 坐标并将其发送到视图模型的位置 X。如果我把它变成一个命令,我从哪里得到 sender 和 e 的信息?
通常,Commands
用于类似按钮的控件,当用户与它们交互(单击按钮、点击它等(时触发。
根据您的应用程序设计和需求,Command
具有CanExecute
和Executed
处理程序或事件。这些允许您设置Command
是否可以执行,以及执行时应该发生什么。
但是,您指的是PreviewMouseDown
事件。您无法阻止系统触发此事件。因此,在这种情况下,新Command
的CanExecute
或多或少是无用的。
为了仍然实现您的目标,您可以使用 Ganesh 已经在评论中指出的EventToCommand
机制。本文和下面的示例应该给你一个提示,它将如何工作:
<ResourceDictionary>
<DataTemplate x:Key="PreviewMouseDownCommandTemplate">
<StackPanel>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDown">
<command:EventToCommand Command="{Binding MyCommandProvider.PreviewMouseDownCommand,
Mode=OneWay,
Source={StaticResource Locator}}"
CommandParameter="{Binding Mode=OneWay}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<!-- Content -->
</StackPanel>
</DataTemplate>
</ResourceDictionary>