从Tap事件获取绑定对象

本文关键字:绑定 对象 获取 事件 Tap | 更新日期: 2023-09-27 18:25:17

我正在尝试访问绑定了DataTemplate的对象,特别是我只需要一个int值。我已经通过Tap:将DataTemplate中的主网格链接到事件处理程序

<DataTemplate x:Name="joinTemplate">
  <Grid Tag="{Binding index}" DataContext="{Binding}" Tap="select_Click" ...>
    ...
  </Grid>
</DataTemplate>

我的处理程序看起来像:

private void select_Click(object sender, System.Windows.Input.GestureEventArgs e)

问题是我仍然无法访问sender.DataContextsender.Tag。然而,当我在调试器中运行它并通过Watch查看它时,只需将"base"扩展两次,就可以同时访问DataContext和Tag。这应该意味着我得到的对象继承了这些对象,并且在某种程度上是原始网格的子对象,但是,我认为发送方始终是您将处理程序绑定到的Grid?为了得到我点击的实际元素,我必须使用e.OriginalSource,对吧?

从Tap事件获取绑定对象

只需将sender强制转换为适当的类型即可访问DataContext属性:

((FrameworkElement)sender).DataContext

然后,以同样的方式,您必须将值绑定到绑定到网格的任何类型。例如,如果绑定了Model:类型的对象

var model = (Model)((FrameworkElement)sender).DataContext