2017-11-24 4 views
0

이전에이 질문을 받았지만 적절한 답변을 찾을 수 없습니다.UWP DataTemplate에서 클릭 된 항목 가져 오기

사용자 목록을 표시하는 데 ItemTemplate을 사용하고 있습니다.이 목록은 사용자 세부 정보가있는 StackPanels로 구성됩니다. 내가 클릭 한 사용자 개체를 얻으려면 어떻게해야합니까?

현재 코드 : 이것은 비동기 API 호출을 통해 채워되고

<GridView Name="usersList"> 
    <GridView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel PointerPressed="UserClicked"> 
       <TextBlock Text="{Binding Forename}"/> 
       <TextBlock Text="{Binding Surname}"/> 
      </StackPanel> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

:

usersList.ItemsSource = null; 
var task = Users.UserAsync<User>(); 
usersList.ItemsSource = await task; 

가 어떻게 PointerPressed 클릭 된 사용자 개체를 캡처 할 수 있습니다?

답변

0

:

private void UserClicked(object sender, PointerRoutedEventArgs e) 
    { 
     User clickedOnUser = (sender as StackPanel).DataContext as User; 
    } 

이 방법은 usersList.SelectedItem을 사용하는 것보다 더 직접적이다, 그래서 그것을 고집하는 것이 좋습니다. 예를 들어, usersList.SelectedItem에 기반한 접근 방식은 GridView에 대해 SelectionMode="None"을 설정하면 작동합니다.

마찬가지로 Sean O'Neil이 알게 된 것처럼 대부분의 경우 시나리오에서는 PointerPressed 대신 Tapped 이벤트를 사용하는 것이 좋습니다.

+0

놀랍지 만 A. Milto와 @Sean O'Neill 모두 –

+0

@BrianHamill 당신을 환영합니다. –

0

원하는 개체를 클릭 할 때 참조하려면 GridView.SelectedItem을 사용하십시오. 이처럼

private void UserClicked_PointerPressed(object sender, PointerRoutedEventArgs e) 
    { 
    var whatYouWant = usersList.SelectedItem; 
    } 
+1

또한 UWP를 사용하면 특별한 이유가없는 한 PointerPressed 대신 Tapped 이벤트를 사용해야합니다. –

관련 문제