c# wpf xaml listview datatemplate

c# - wpf listview



WPF ListView con botones en cada lĂ­nea (3)

Tengo una lista de Games que solo tiene una ID , una Date y una Time . Estoy configurando esta lista como el DataContext .

Entonces tengo un DataTemplate para estos juegos que es:

<DataTemplate DataType="{x:Type loc:Game}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="100"></ColumnDefinition> <ColumnDefinition Width="100"></ColumnDefinition> <ColumnDefinition Width="100"></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Name="dateBlock" Grid.Column="0" Grid.Row="1" Text="{Binding Date, StringFormat=d}"></TextBlock> <TextBlock Name="TimeBlock" Grid.Column="1" Grid.Row="1" Text="{Binding Time}"></TextBlock> //need to but a button here for each row </Grid> </DataTemplate>

Para usar la plantilla, simplemente estoy haciendo esto:

<ListBox ItemsSource="{Binding}"></ListBox>

Necesito agregar un Button a cada línea en esta vista de lista que tenga el mismo evento de clic, pero de alguna manera pasará la ID del juego para el cual se hace clic en el botón.

¿Cómo puedo hacer esto? Estoy atascado. Si no tiene sentido, hágamelo saber y trataré de explicarlo mejor.


Con un ListBox.ItemTemplate. Luego, en su evento de clic, puede obtener el objeto a través de DataContext.

<ListBox.ItemTemplate> <DataTemplate> <Button Content="^" IsEnabled="{Binding Path=IsNotFirst, Mode=OneWay}" Click="btnMoveFDAup"/> </DataTemplate> </ListBox.ItemTemplate> private void btnMoveFDAup(object sender, RoutedEventArgs e) { Button btn = ((Button)sender); // btn.DataContext will get you to the row object where you can retrieve the ID }



Para la primera parte, agregue un Button a la DataTemplate y suscríbase al evento Click

<DataTemplate DataType="{x:Type loc:Game}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="100"></ColumnDefinition> <ColumnDefinition Width="100"></ColumnDefinition> <ColumnDefinition Width="100"></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Name="dateBlock" Grid.Column="0" Grid.Row="1" Text="{Binding Date, StringFormat=d}"></TextBlock> <TextBlock Name="TimeBlock" Grid.Column="1" Grid.Row="1" Text="{Binding Time}"></TextBlock> <Button Click="Button_Click">X</Button> </Grid> </DataTemplate>

En el código detrás del controlador de eventos, puede obtener el DataContext del Button pulsado y averiguar el ID como

private void Button_Click(object sender, RoutedEventArgs e) { Button button = sender as Button; Game game = button.DataContext as Game; int id = game.ID; // ... }