2017-07-12 78 views
0

我有一个DataGrid包含一个复选框。我想通过单击删除按钮来删除复选框被选中的DataGrid中的所有行。我的数据网格的XAML如下所示。使用复选框和删除按钮从WPF Datagrid中删除多行

<DataGrid x:Name="orders" Grid.Row="4" Background="AliceBlue" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="False" > 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Header="Select" Binding="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}}" ></DataGridCheckBoxColumn> 
      <DataGridTextColumn Header="Item Name" Binding="{Binding Path=Name}" ></DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

我想编写代码,点击按钮,删除其中的复选框被选中,像这样的所有行。

private void btnDelete_Click(object sender, RoutedEventArgs e) 
    { 
     //Delete logic here 

    } 

我该如何做到这一点? 注意:我使用的是EntityFramework而不是ADO。数据网格就是确保DataGrid允许通过SelectionMode

SelectionMode="Extended" 

多选择,那么按钮单击获取基础上,从网格中选定的项目势必类型订单的可观察集合像ObservableCollection<Order>

+0

什么是当前的行为基于你已经尝试了什么是预期的行为。如果复选框被正确绑定,那么它只是获取'SelectedItems'并将其从集合中移除的问题。 – Nkosi

+0

也许代码片段可以提供帮助。我如何获得检查的行。 – KMarto

回答

1

第一IsSelected在视图中结合

private void btnDelete_Click(object sender, RoutedEventArgs e) { 
    //get selected items 
    if (orders.SelectedItems != null && orders.SelectedItems.Count > 0) { 
     var toRemove = orders.SelectedItems.Cast<Order>().ToList(); 
     //Delete logic here 
     //...remove items from EF and save 

     //Once confirmed remove from items source 
     var items = orders.ItemsSource as ObservableCollection<Order>; 
     if (items != null) { 
      foreach (var order in toRemove) { 
       items.Remove(order);  
      } 
     } 
    } 
} 
1
Write code behind like this.... 
     public MainWindow() 
     { 
      InitializeComponent(); 
      List<Great> p = new List<Great>(); 
      p.Add(new Great() { Name = "Good" }); 
      p.Add(new Great() { Name = "Bad" }); 
      p.Add(new Great() { Name = "Ugly" }); 
      orders.ItemsSource = p; 

     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      List<Great> SelectedOrders = new List<Great>(); 
      for (int i = 0; i < orders.SelectedItems.Count; i++) 
      { 
       SelectedOrders.Add((Great)orders.SelectedItems[i]); 
      } 
      var kk = orders.ItemsSource as List<Great>; 
      foreach (var item in SelectedOrders) 
      { 
       kk.Remove(item); 
      } 
      orders.Items.Refresh(); 
     } 

     public class Great 
     { 
      public string Name { get; set; } 
     } 
0

上只需调用Clear()方法ObservableCollection<Order>

private void btnDelete_Click(object sender, RoutedEventArgs e) 
{ 
    var sourceCollection = orders.ItemsSource as ObservableCollection<Order>; 
    if (orders != null) 
     orders.Clear(); 
}