在具有多行的DataTemplate中查找TextBox的内容

时间:2013-07-25 09:22:23

标签: c# wpf datatemplate itemscontrol

我有这段代码:

<StackPanel>
<ItemsControl ItemsSource="{Binding Position}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="2*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="80" />
                </Grid.ColumnDefinitions>
                <TextBox Grid.Column="0" Text="{Binding Name}" Margin="5" />
                <TextBox Grid.Column="3" Text="{Binding ID}" Margin="5" />
                <Button Grid.Column="4" Content="X" Click="Delete" />
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

例如我有3行。我想用它的元素删除第二行。我单击第二行中的Delete按钮,我需要的只是TextBox中的ID。如果我在后面的代码中得到ID,我可以从数据库中删除该位置。如果我只有一行就没有问题。在这种情况下,我给包含ID的TextBox命名,我可以在后面的代码中获取值。但是,如果我在一个单独的行中有3,4,10个位置,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:0)

您可以将Button的Tag绑定到ID属性,并访问Click处理程序中的内容:

<Button Grid.Column="4" Content="X" Click="Delete" Tag="{Binding ID}" />

点击处理程序:

private void Delete(object sender, RoutedEventArgs e)
{
    var button = (Button)sender;
    var id = (int)button.Tag;
    // ...
}