【问题标题】:MouseEvents not firing as expected using MVVM approachMouseEvents 未按预期使用 MVVM 方法触发
【发布时间】:2013-05-06 11:43:35
【问题描述】:

我正在尝试使用 MVVM 方法在控件上捕获鼠标事件。我正在使用混合事件触发器来调用命令。

在下面的示例中,我有一个统一的网格,并且网格中的每个项目都呈现为一个矩形。我想记录简单的手势(比如当用户画一条线时),所以我想在鼠标按钮按下时执行一个命令,在几个项目上移动然后被抬起。

我将事件触发器放在矩形上,因为我想捕捉哪个视图模型项用于开始或结束所谓的手势。

似乎 PreviewMouseDownPreviewMouseUp 没有作为 Rectangle 的一部分触发。但是,如果我将这些事件移动到 UniformGrid,它们会正确触发,但我没有用于开始/结束手势的项目。

MouseEnter 命令按预期触发。

关于为什么 Preview* 事件没有触发的任何想法,或者您能建议不同的标记吗?

<ItemsControl ItemsSource="{Binding Items}">
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
          <UniformGrid Rows="{Binding Rows}" Columns="{Binding Columns}" />
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
       <DataTemplate>
          <Rectangle Fill="Red">
             <i:Interaction.Triggers>
                 <i:EventTrigger EventName="MouseEnter">
                     <i:InvokeCommandAction 
                         Command="{Binding Path=DataContext.AddItem, RelativeSource={RelativeSource AncestorType=Window}}"
                         CommandParameter="{Binding}" 
                         />
                 </i:EventTrigger>
                 <i:EventTrigger EventName="PreviewMouseDown">
                     <i:InvokeCommandAction 
                         Command="{Binding Path=DataContext.StartGesture, RelativeSource={RelativeSource AncestorType=Window}}"
                         CommandParameter="{Binding}" 
                         />
                 </i:EventTrigger>
                 <i:EventTrigger EventName="PreviewMouseUp">
                     <i:InvokeCommandAction 
                         Command="{Binding Path=DataContext.EndGesture, RelativeSource={RelativeSource AncestorType=Window}}"
                         CommandParameter="{Binding}" 
                         />
                 </i:EventTrigger>
             </i:Interaction.Triggers>
          </Rectangle>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>`

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    我应该投资rubber duck。在花时间提出问题时,我将代码复制粘贴到编辑器中,然后将其清理干净。这样做,我实际上编写了正确的标记。

    几个小时后,晚饭后,有时间理清头绪。看到没有人回答我的问题,我感到很沮丧。我回到我的 IDE 并且输出窗口中的绑定错误是不可能错过的! StartGesture/EndGesture 命令缺少命令绑定的 RelativeSource 部分并且失败。

    继续,stackoverflow。这里没什么可看的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      相关资源
      最近更新 更多