1

コレクションからアイテムを取得するListBox(x:Name = notesList) が WPF アプリケーションにあります。ItemsSourceコレクションはNotes私のクラスのプロパティでDataあり、タイプはObservableCollection<Note>です。私はそれをこのようにバインドします: (dataは にDataいくつかのアイテムを持つオブジェクトですNotes)

Binding bind = new Binding();
bind.Mode = BindingMode.TwoWay;
bind.Source = data;
bind.Path = new PropertyPath("Notes");
notesList.SetBinding(ListBox.ItemsSourceProperty, bind);

バインディングが機能し、アイテムが ListBox に表示されます。notesListNotesコレクションを同期させたいので、TwoWay バインディングを設定します。この方法で選択したアイテムを削除しようとすると、問題が発生します。

NotesList.Items.RemoveAt( notesList.SelectedIndex );

例外が発生します:「ItemsSource が使用されている間、操作は無効です。代わりに、ItemsControl.ItemsSource を使用して要素にアクセスして変更してください」。

私の質問: コレクション関数を使用して要素を削除する必要がありますか? data.Notes.RemoveAt(index)? ListBoxクラスを使用してアイテムを削除する方法はありますか?その結果、コレクション内のアイテムが削除されますか? TwoWay Binding を使えば可能になると思いました。

4

1 に答える 1

1

このエラーが意味するのは、ItemsSourceプロパティを使用してコレクションをコレクション コントロールにバインドした場合、そのコントロールから項目を削除できないということだけです。でも心配しないでください。本当に簡単な解決策があります。代わりにコレクションからアイテムを削除します。

data.Notes.Remove(data.Notes.Where(n => n == notesList[notesList.SelectedIndex]).
FirstOrDefault());

コード ビハインドでコントロールを使用しない方がよいでしょう...プロパティをプロパティにバインドする場合は、次のComboBox.SelectedItemように簡単に実行できます。

public Note SelectedNote { get; set; } // should implement INotifyPropertyChanged

... それから...

data.Notes.Remove(SelectedNote);
于 2013-08-29T15:38:38.433 に答える