2017-11-24 8 views
0

これは以前に尋ねられていると確信していますが、適切な答えが見つかりません。UWP DataTemplateのClicked Itemを取得する

私は、ユーザーのリストを表示するためにItemTemplateを使用しています。このリストは、ユーザーの詳細を含むStackPanelで構成されています。クリックしたユーザーオブジェクトを取得するにはどうすればよいですか?

現在のコード:

<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にクリックされたユーザーオブジェクトをキャプチャすることができますか?

答えて

0

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

このアプローチは、usersList.SelectedItemを使用して1よりも直接的であるので、私はそれに固執することをお勧めします。たとえば、GridViewにSelectionMode="None"を設定すると動作しますが、usersList.SelectedItemに基づくアプローチは動作しません。

また、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イベントを使用する必要があります。 –

関連する問題