1

我的WPF 应用程序中有一个ListBox(x:Name = ),它从集合中获取项目。该集合是我班级中的一个属性,类型为. 我以这种方式绑定它:(是一个包含一些项目的对象)notesListItemsSourceNotesDataObservableCollection<Note>dataDataNotes

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

绑定有效,项目显示在 ListBox 中。我设置了 TwoWay 绑定,因为我希望notesListNotes集合同步。当我尝试以这种方式删除所选项目时会出现问题:

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 回答