0

監視可能なコレクションにバインドされたデータ グリッドがあります。データ グリッドでいくつかの行を選択してボタンをクリックすると、それらの行がコレクションから削除されます。

私のやり方で試してみると、「<strong>コレクションが変更されました。列挙操作が実行されない可能性があります。」

コレクションを変更してループしているため、エラーが発生していることはわかっています。調査を行い、見つかったものを適用しようとしましたが、動作するようです。

コレクションを作成して 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);
            }
        }

これはデータグリッドの 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;
        }
    }
4

2 に答える 2

0

私がそれをする方法:

  • XbmcInfo: Datagrid.record で選択されたプロパティにバインドされたプロパティ IsSelected を追加します。
  • Button_Click_1: SelectedShowSeason.Where(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 を持つ datagrid 内のアイテムがあなたのプロパティにバインドされていると言うことです。

試してみてください...コードにはいくつかのエラーがある可能性がありますが、その起源はそこにあります:)

よろしく、

于 2013-10-03T13:19:57.227 に答える