4

我正在尝试访问绑定到的对象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 查看它时,我可以DataContext通过简单地扩展“base”两次来同时访问 the 和 Tag。这应该意味着我得到的对象继承了这些对象,并且在某种程度上是原始 Grid 的子对象,但是,我认为发送者始终是Grid您将处理程序绑定到的对象?要获得我点击的实际元素,我必须使用,对于这个例子,e.OriginalSource对吧?

4

1 回答 1

11

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

((FrameworkElement)sender).DataContext

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

var model = (Model)((FrameworkElement)sender).DataContext
于 2013-07-26T21:34:00.643 回答