如何识别模板事件的调用者

时间:2010-06-13 07:07:23

标签: c# wpf silverlight

我有一个ListBox容器数据绑定和模板化如下:

    <ListBox x:Name="ListBox" 
             ItemsSource="{Binding Source={StaticResource List}}"
             ItemTemplate="{StaticResource ListTemplate}">
    </ListBox>

在我的ListTemplate资源中,我定义了一个包含一些子元素的Grid。我在其中一个子元素上设置了一个click事件处理程序。事件处理程序不是特定于行的,我需要一种(最佳实践)方法来识别事件触发的ListBox中的哪一行。

从我的数据源中,我有一个与行对应的唯一ID。我目前没有在数据绑定中公开这个ID,尽管可以。理想情况下,我希望事件处理程序能够识别事件被触发的行的ID。

1 个答案:

答案 0 :(得分:1)

如果您能向我们展示您的网格定义以便更好地了解您的问题,那就太棒了。

由于我的Grid的DataContext拥有我需要的所有数据,我所做的是以下内容(我尝试尽可能使用命令,但也适用于事件处理程序)

    private void NotificationLinkClick(object sender, RoutedEventArgs e)
    {
        var myDataObject = ((Hyperlink)sender).DataContext as MyDataObject;
        DoSomeWork(myDataObject);
    }

我的网格中的每一行都有一个超链接。为了知道选择了哪一个,在事件处理程序中我获取DataContext然后将其转换为我的底层对象。一旦我得到“排”,我就做我需要做的事。

另外,正如安东尼所说,我们可以使事情变得更通用

    private void NotificationLinkClick(object sender, RoutedEventArgs e)
    {
        var myDataObject = ((FrameworkElement)sender)
                                             .DataContext as MyDataObject;
        DoSomeWork(myDataObject);
    }

我很确定有更好/更清洁的方法,但这很有效。 HTH

相关问题