J'ai une liste de Games
qui a juste un ID
, un Date
et un Time
. Je définis cette liste comme DataContext
.
J'ai alors un DataTemplate
pour ces jeux qui est:
<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>
Pour utiliser le modèle, je fais simplement ceci:
<ListBox ItemsSource="{Binding}"></ListBox>
Je dois ajouter un Button
à chaque ligne de cette vue de liste qui a le même événement de clic, mais passera en quelque sorte l'ID du jeu pour lequel le bouton est cliqué.
Comment puis-je faire ceci? Je suis coincé. Si cela n'a pas de sens, faites le moi savoir et je vais essayer de mieux vous expliquer.
Pour la première partie, ajoutez un Button
à DataTemplate
et abonnez-vous à l'événement 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>
Dans le code derrière le gestionnaire d'événements, vous pouvez obtenir le DataContext
du Button
cliqué et trouver l'id comme
private void Button_Click(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
Game game = button.DataContext as Game;
int id = game.ID;
// ...
}
Facilement. Ajoutez un Button
à votre DataTemplate , donnez-lui un Command
puis définissez le CommandParameter="{Binding}"
. Le DataContext dans un DataTemplate est l'objet.
Comme demandé, quelques liens vers l'utilisation des commandes.
HTH,
Avec un ListBox.ItemTemplate. Ensuite, dans votre événement de clic, vous pouvez obtenir l'objet via 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
}