从Tap事件中获取绑定对象

use*_*530 4 c# xaml windows-phone-8

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

<DataTemplate x:Name="joinTemplate">
  <Grid Tag="{Binding index}" DataContext="{Binding}" Tap="select_Click" ...>
    ...
  </Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我的处理程序如下:

private void select_Click(object sender, System.Windows.Input.GestureEventArgs e)
Run Code Online (Sandbox Code Playgroud)

问题是我仍然无法访问sender.DataContext或sender.Tag.但是,当我在调试器中运行它并通过Watch查看它时,我可以DataContext通过简单地扩展"base"两次来获取和Tag.这应该意味着我被赋予的对象继承了那些对象并且在某种程度上是原始Grid的子对象,但是,我认为发送者始终是Grid你绑定处理程序的?为了获得我使用的实际元素,我必须使用,对于这个例子e.OriginalSource,对吧?

Kev*_*sse 10

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

((FrameworkElement)sender).DataContext
Run Code Online (Sandbox Code Playgroud)

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

var model = (Model)((FrameworkElement)sender).DataContext
Run Code Online (Sandbox Code Playgroud)