Reputation: 551
I have a collection that I am displaying in a WPF Listview. I will have an edit button in each row and need to pass an ID to another control on the screen when that's clicked. I'm not going to be editing in place so I'm not using the Gridview.
How do I pass this ID to my other control?
Currently my XAML looks like this.
<ListView Name="uxPackageGroups" ItemsSource="{Binding PackageGroups}" BorderThickness="0" Grid.Row="6" Grid.Column="1" Width="300" BorderBrush="#FF0000E8">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Name="uxStackPanel" Orientation="Horizontal">
<Button Content="Edit" Width="50" />
<Label Content="{Binding Name}" Height="20" Margin="0" Padding="0"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
This WPF newbie thanks you in advance!
Upvotes: 4
Views: 8375
Reputation: 25146
If you don't want to go as far as creating commands to do it, you could use the "Tag" property of the button:
<Button Content="Edit" Width="50" Tag="{Binding}" />
or
<Button Content="Edit" Width="50" Tag="{Binding ID}" />
and then reference the button's tag property in your event handler.
Upvotes: 4
Reputation: 32568
Command parameters are good for this:
<Button Content="Edit" Width="50"
Command="{some command here}"
CommandParameter="{Binding ID}" />
For the "some command here" part, make sure you are declaring a command.
Upvotes: 2
Reputation: 15579
You're using databinding, so it's pretty easy. In the code that is responding to the button click, get a reference to the button and examine its DataContext property. That will have a reference to the underlying object that you bound it to.
protected void EditButton_Click(object sender, RoutedEventArgs e)
{
TextBox textBox = (TextBox)sender;
int id = ((TheBounObjectType)textBox.DataContext).Id;
}
Upvotes: 4