UWP获取DataTemplate中的Clicked Item

时间:2017-11-24 22:45:09

标签: c# xaml uwp

我确定之前已经问过,但我找不到合适的答案。

我使用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对象?

2 个答案:

答案 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;
   }