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;
// ...
}