2012-08-01 137 views
5

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

这对我来说并不直观。我想保留一个额外的列,其中有按删除按钮应该删除该行。 (像什么可以在ItemTemplate中在ASP.NET中进行)

<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数据网格本身内删除行的这一功能

回答

16

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

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

这让我们使用所有按钮的启用状态。如果启用'CanUserAddRows'并选择最后一行,视图中所有按钮的启用状态将被禁用。你知道如何解决这个问题吗? – Nebula 2013-04-16 11:52:45

1

您将不得不将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)事件,或者你可以直接绑定按钮的命令,但你将需要绑定选择ViewModel并在执行的命令中处理它:

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