2017-04-05 10 views
0

私はクラスBookとListを持っています。 ListViewを使用してリストを表示しています。ボタンを押したときに選択した項目を削除します。 は、これは私のアプローチです:C#WPF:ListView.Selecteditemsで受け取ったアイテムをリストから削除する

private void currentlyReadingRemoveItem_Click(object sender, RoutedEventArgs e) 
    { 
     var selectedItems = CurrentlyReadingBooksListView.SelectedItems; 
     _currentlyReadingBooks.Except((List<Book>)selectedItems); 
    } 

しかし、私はこのエラーを取得:

System.InvalidCastException: 'Unable to cast object of type 'System.Windows.Controls.SelectedItemCollection' to type 'System.Collections.Generic.List`1[BookshelfLibrary.Book]'.'

私は過去時間のためにこれを解決しようとしてきた、私はいくつかの他の鋳造方法を試してみましたが、私もしません他に何を知っている、私は思うにはあまりにも疲れている。 これは全体のプロジェクトです:https://github.com/GoldenDragonPC/Bookshelf

ありがとうございます。

EDIT: 作業コード。

  var selectedItems = CurrentlyReadingBooksListView.SelectedItems; 
     var test = _currentlyReadingBooks.Except(selectedItems.Cast<Book>()); 
     _currentlyReadingBooks = test.ToList(); 
     WriteData(_currentlyReadingBooks, CurrentlyReadingPath); 
     InitializeList(); 

答えて

0

linqのキャスト方式をお試しください。ような何か:

_currentlyReadingBooks.Except(selectedItems.Cast<Book>()?.ToList()); 

更新

_currentlyReadingBooks = _currentlyReadingBooks.Except(selectedItems.Cast<Book>()).ToList(); 
+0

また、あなたは戻り値で何かを行うことを確認してください。 「例外」はインプレースでは機能しません。IEnumerableを返します。 – MrZander

+0

ありがとうございますが、これは何のエラーもスローされませんが、何らかの理由で実際にリストから項目を削除するわけではありません。私は戻り値変数で何かをする必要があることを見て、数分後にそれを試してみましょう。 –

+0

ありがとう、考え出した。 –

関連する問題