我的WPF应用程序窗口上有一个数据网格,数据绑定到一个可观察的集合。在DataGrid中,我设置了属性CanUserDeleteRows=True
,我可以通过按键盘上的“删除”按钮删除该行。
这对我来说看起来不太直观。我想保留一个额外的列,其中按下删除按钮,该行应删除。 (类似于ASP.NET中的ItemTemplate可以做的事情)
<DataGrid x:Name="dgrQuestions" AutoGenerateColumns="False" Height="224" HorizontalAlignment="Left" Margin="42,73,0,0" VerticalAlignment="Top" Width="663" ItemsSource="{Binding QueList}" CanUserAddRows="True" CanUserDeleteRows="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Qu" Binding="{Binding Path=Que, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="An" Binding="{Binding Path=Ans, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="Hi" Binding="{Binding Path=Hi, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
如何使用数据网格本身内的button
来获取删除行的功能
答案 0 :(得分:17)
您可以添加包含调用DataGridTemplateColumn
命令的按钮的Delete
。 DataGrid将处理Delete命令并删除该行。
<DataGridTemplateColumn Header="Actions" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Remove Row" Command="Delete"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
答案 1 :(得分:2)
您必须将DataGridTemplateColumn添加到网格中。像
这样的东西<DataGrid x:Name="dgrQuestions" AutoGenerateColumns="False" Height="224" HorizontalAlignment="Left" Margin="42,73,0,0" VerticalAlignment="Top" Width="663" ItemsSource="{Binding QueList}" CanUserAddRows="True" CanUserDeleteRows="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Delete" Width="75">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Tag="{Binding}" Click="OnDelete"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Qu" Binding="{Binding Path=Que, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="An" Binding="{Binding Path=Ans, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="Hi" Binding="{Binding Path=Hi, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
然后将您的按钮绑定到任何ID或项目{Binding},您可以在后面的代码中处理事件(OnDelete),或者您可以将按钮直接绑定到命令,但是您需要将SelecteItem绑定到ViewModel并处理在执行命令时使用它:
SelectedItem="{Binding SelectedItem, Mode=TwoWay}"