我有一个ListBox容器数据绑定和模板化如下:
<ListBox x:Name="ListBox"
ItemsSource="{Binding Source={StaticResource List}}"
ItemTemplate="{StaticResource ListTemplate}">
</ListBox>
在我的ListTemplate资源中,我定义了一个包含一些子元素的Grid。我在其中一个子元素上设置了一个click事件处理程序。事件处理程序不是特定于行的,我需要一种(最佳实践)方法来识别事件触发的ListBox中的哪一行。
从我的数据源中,我有一个与行对应的唯一ID。我目前没有在数据绑定中公开这个ID,尽管可以。理想情况下,我希望事件处理程序能够识别事件被触发的行的ID。
答案 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