Piccola premessa, prima di leggere questo articolo bisogna sapere cosa è il binding, per un breve ripasso vi consiglio il blog del mio amico Luca
Adesso che sapete di cosa stiamo parlando potete proseguire con la lettura 😀
Molti di voi avranno già utilizzato il DataContext per ottenere l’oggetto della lista selezionato in seguito agli eventi SelectionChanged o ItemClick in elementi di tipo ListView o GridView con un metodo molto simile al seguente
private void listViewComments_ItemClick(object sender, ItemClickEventArgs e) { MioOggetto o=(MioOggetto)e.ClickedItem; }
Quello che forse non tutti sanno è che la proprietà DataContext può tornarci utile anche nel momento in cui ci troviamo di fronte ad eventi generati da oggetti annidati all’interno di liste.
Prendiamo il semplice caso di una lista con una serie di link all’interno che permettono all’utente di eseguire un’azione:
<ListView Grid.Row="1" x:Name="listViewComments" ItemsSource="{Binding}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <HyperlinkButton Tag="{Binding ID}" Margin="0,0,10,0" x:Name="spamLink" Click="commentSpam_Click" Style="{StaticResource PivotTitleContentControlStyle}"> <TextBlock> <Underline> <Run Text="{Binding status}"/> </Underline> </TextBlock> </HyperlinkButton> <HyperlinkButton x:Name="ApproveLink" Click="commentApprove_Click" Style="{StaticResource PivotTitleContentControlStyle}"> <TextBlock> <Underline> <Run Text="{Binding status2}"/> </Underline> </TextBlock> </HyperlinkButton> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView>
Nel click potremo molto semplicemente ottenere il nostro elemento bindato castando il sender dell’evento alla sua classe originale e poi accedendo alla proprietà DataContext
private async void commentSpam_Click(object sender, RoutedEventArgs e){ MioOggetto c = (MioOggetto)((HyperlinkButton)sender).DataContext; }
In questo modo non ci sarò necessità ti portarsi dietro eventuali id bindati con la proprieta Tag per poter risalire all’elemento selezionato.
Se questo tips vi è stato utile lasciate pure un commento 😀
Commenti recenti