2013-10-03 67 views
0

我有一個綁定到可觀察集合的數據網格。 我想在數據網格中選擇幾行,然後單擊一個按鈕並將這些行從集合中刪除。通過在數據網格中選擇它們從ObservableCollection刪除條目

當我嘗試它我的方式我收到一個錯誤「集合被修改;枚舉操作可能不會執行。 「

我知道錯誤是由於我正在循環雖然改變集合我做了一些研究,並試圖應用我發現的但我似乎可以得到它的工作。

如何使收集,並將其綁定到DataGrid

ObservableCollection<XbmcInfo> SelectedShowSeason = new ObservableCollection<XbmcInfo>(); 
ToCopy.DataContext = SelectedShowSeason; 

我如何努力從集合中刪除值

private void Button_Click_1(object sender, RoutedEventArgs e) 
     { 
      var x = ToCopy.SelectedItems; 
      foreach (XbmcInfo f in x) 
      { 
       string ShowName = f.ShowName; 
       string ShowSeasonNumber = f.Number; 

       var Selected = SelectedShowSeason.FirstOrDefault(u => u.ShowName == ShowName && u.Number == ShowSeasonNumber); 

       SelectedShowSeason.Remove(Selected); 
      } 
     } 

這是爲DataGrid的XML

<DataGrid Name="ToCopy" AutoGenerateColumns="False" ItemsSource="{Binding}" Margin="0,0,0,51" Grid.Row="2" Grid.ColumnSpan="3" IsReadOnly="True" CanUserResizeRows="False" CanUserReorderColumns ="False" IsSynchronizedWithCurrentItem="True"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="ShowName" Width="*" Binding="{Binding Path=ShowName}" /> 
       <DataGridTextColumn Header="Season" Width="50" Binding="{Binding Path=Number}" /> 
       <DataGridTextColumn Header="Path" Width="*" Binding="{Binding Path=Path}"/> 
      </DataGrid.Columns> 
    </DataGrid> 

我的班級

public class XbmcInfo 
    { 
     public string ShowName 
     { 
      get; 
      set; 
     } 

     public string Number 
     { 
      get; 
      set; 
     } 

     public string Path 
     { 
      get; 
      set; 
     } 
    } 
+0

並且怎麼樣XAML?你如何做綁定? – sexta13

+0

你在問題中刪除的方式......它仍然在拋出那個錯誤...因爲你沒有在這裏迭代收集? – Nitin

回答

0

的方式,我會做到這一點:

  • XbmcInfo:添加屬性IsSelected綁定到選定的屬性數據網格.record
  • Button_Click_1:在SelectedShowSeason.W中迭代此處(X => x.IsSelected);然後刪除項目。

其他方式,是從去年到第一迭代:

 for(int i=x.Count; i>0;i--) { 
string ShowName = x[i].ShowName; 
       string ShowSeasonNumber = x[i].Number; 

var Selected = SelectedShowSeason.FirstOrDefault(u => u.ShowName == ShowName && u.Number == ShowSeasonNumber); 

         SelectedShowSeason.Remove(Selected); 
    } 

===================編輯===== ==============

要將屬性綁定到數據網格,您可以爲數據網格中的項目添加樣式。

事情是這樣的:

<Datagrid..... ItemContainerStyle = {StaticResource ItemsSelected} /> 

這種「ItemsSelected」風格,將是這樣的:

<Style> 
<Setter Property = "IsSelected" Value = "{Binding Path=IsSelected}"/> 
</Style> 

你在做什麼是說,在數據網格中的項目,其中有一個IsSelected ,綁定到你的財產。

試試看......代碼可以有一些錯誤,但它的起源是有:)

問候,

+0

我已添加我的班級,你會介意你將如何做「XbmcInfo:添加屬性IsSelected綁定到Datagrid.record中選定的屬性」 – justinf

+0

我會編輯它......但它的風格.... – sexta13

+0

好的謝謝我將採用這個解決方案,因爲它會幫助我後來想到的其他事情。 – justinf

1

我相信這個問題是修改SelectedItems集合在迭代它。

嘗試更換行:

var x = ToCopy.SelectedItems; 

有了:

var x = ToCopy.SelectedItems.OfType<XbmcInfo>().ToArray(); 
+0

謝謝我看到這會工作,但sexta13的解決方案將有助於我正在看的其他東西。 – justinf

相關問題