6

我的 WPF 应用程序窗口上有一个数据网格,数据绑定到一个可观察的集合。在 DataGrid 中,我已经设置了属性CanUserDeleteRows=True,并且可以通过按键盘上的 Delete 按钮来删除该行。

这对我来说看起来不太直观。我想保留一个额外的列,该列在按下该行应该被删除时具有删除按钮。(类似于可以在 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如何通过在数据网格本身内部使用来获得删除行的功能

4

2 回答 2

19

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

<DataGridTemplateColumn Header="Actions" IsReadOnly="True">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Content="Remove Row" Command="Delete"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
于 2012-08-01T12:42:01.063 回答
3

您必须将 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}"
于 2012-08-01T12:45:53.247 回答