C# 在具有多行的DataTemplate中查找文本框的内容

C# 在具有多行的DataTemplate中查找文本框的内容,c#,wpf,datatemplate,itemscontrol,C#,Wpf,Datatemplate,Itemscontrol,我有以下代码: <StackPanel> <ItemsControl ItemsSource="{Binding Position}"> <ItemsControl.ItemTemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions> <Column

我有以下代码:

<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
按钮,只需要文本框中的
ID
。如果我在代码后面获得
ID
,我可以从数据库中删除该位置。如果我只有一排就没有问题了。在这种情况下,我为包含
ID
的文本框指定一个名称,我可以在代码隐藏中获取值。但是,如果我在单独的一行中有3、4、10个位置,我该怎么做呢?

您可以将按钮的
标记
绑定到
ID
属性,并在
单击
处理程序中访问该属性:

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

不要使用
单击
事件,而是将
命令
绑定到视图模型,就像绑定
ID
Name
一样,并在那里处理问题解决非常类似的问题修改数据模型,而不是数据模板内容,如果操作正确,UI将反映出来。谢谢。我只做了一点小小的改变。由于
ID
返回
int
我在
int
中转换了标记,而不是
string
这是我最初编写的,因此我认为ID可能是一个字符串:-)我更新了答案。
private void Delete(object sender, RoutedEventArgs e)
{
    var button = (Button)sender;
    var id = (int)button.Tag;
    // ...
}