我有一个Games
列表,其中只有ID
,Date
和Time
。
我将此列表设置为DataContext
。
然后我为这些游戏提供DataTemplate
:
<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>
要使用模板,我只是这样做:
<ListBox ItemsSource="{Binding}"></ListBox>
我需要在此列表视图中的每一行添加一个Button
,该行具有相同的点击事件,但会以某种方式传递正在点击该按钮的游戏ID。
我该怎么做?我被卡住了。 如果它没有意义让我知道,我会尝试更好地解释。
答案 0 :(得分:43)
对于第一部分,向Button
添加DataTemplate
并订阅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>
在事件处理程序后面的代码中,您可以获取所点击DataContext
的{{1}}并找出ID
Button
答案 1 :(得分:16)
容易。在 DataTemplate 中添加Button
,为其指定Command
,然后设置CommandParameter="{Binding}"
。 DataTemplate中的 DataContext 是对象。
根据要求,指向使用命令的一些链接。
HTH,
答案 2 :(得分:3)
使用ListBox.ItemTemplate。然后在您的点击事件中,您可以通过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
}