首页 文章

使用删除按钮删除WPF Datagrid中的行

提问于
浏览
5

我的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>

如何通过在datagrid本身内使用 button 来获取删除行的功能

2 回答

  • 2

    您可以添加 DataGridTemplateColumn ,其中包含一个调用 Delete 命令的按钮 . DataGrid将处理Delete命令并删除该行 .

    <DataGridTemplateColumn Header="Actions" IsReadOnly="True">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button Content="Remove Row" Command="Delete"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    
  • 17

    您必须将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或项目,您可以在后面的代码中处理事件(OnDelete),或者您可以将按钮直接绑定到命令,但是您需要将SelecteItem绑定到ViewModel并在其上处理它执行命令:

    SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
    

相关问题