我确定之前已经问过,但我找不到合适的答案。
我使用ItemTemplate显示用户列表,此列表包含带有用户详细信息的StackPanels。如何获取我点击的用户对象?
当前代码:
<GridView Name="usersList">
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel PointerPressed="UserClicked">
<TextBlock Text="{Binding Forename}"/>
<TextBlock Text="{Binding Surname}"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
这是通过异步API调用填充的:
usersList.ItemsSource = null;
var task = Users.UserAsync<User>();
usersList.ItemsSource = await task;
如何捕获已在PointerPressed上单击的User对象?
答案 0 :(得分:1)
像这样:
private void UserClicked(object sender, PointerRoutedEventArgs e)
{
User clickedOnUser = (sender as StackPanel).DataContext as User;
}
这种方法比使用usersList.SelectedItem
的方法更直接,所以我建议坚持使用它。例如,如果为GridView设置SelectionMode="None"
,它将起作用,而基于usersList.SelectedItem
的方法则不会。
此外,正如Sean O'Neil正确地注意到的那样,对于最常见的情况,您可能希望使用Tapped
事件而不是PointerPressed
。
答案 1 :(得分:0)
使用GridView.SelectedItem在您单击时引用所需的对象。
private void UserClicked_PointerPressed(object sender, PointerRoutedEventArgs e)
{
var whatYouWant = usersList.SelectedItem;
}