IEditableCollectionView&的EntityFramework

时间:2013-06-29 12:47:25

标签: .net wpf vb.net

我有一个带有ObservableCollection(Of T)的ListView数据源,其中" T"是EF的实体。 要添加/编辑项目,请使用IEditableCollectionView。它完美地运作。问题是取消修改现有项目的操作。

Private Sub edit_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles ListBoxMain.MouseDoubleClick

   If ListBoxMain.SelectedItem Is Nothing Then
        MessageBox.Show("No item is selected")
        Return
    End If

    Dim editableCollectionView As IEditableCollectionView = TryCast(ListBoxMain.Items, IEditableCollectionView)

    Dim win As New ChangeItemWindow()
    editableCollectionView.EditItem(ListBoxMain.SelectedItem)
    win.DataContext = ListBoxMain.SelectedItem

    If CBool(win.ShowDialog()) Then
        editableCollectionView.CommitEdit()
    Else
        editableCollectionView.CancelEdit()
    End If

End Sub

方法" editableCollectionView.CancelEdit()",抛出以下异常:"当前编辑元素不支持CancelEdit。" 我试着看看是什么给了我这个属性" CanCancelEdit"是"错误。"

谢谢。

1 个答案:

答案 0 :(得分:0)

你应该调用CanCancelEdit()来检查你是否可以使用CancelEdit()。

为了使这项工作,集合中的对象需要实现IEditableObject:有一个如何在http://msdn.microsoft.com/en-us/library/system.componentmodel.ieditableobject(v=vs.110).aspx

发生这种情况的例子

IEditableObject主要用于DataGridRows。

在这种特殊情况下,当您正在编辑一个项目并且可能取消时,请不要使用CancelEdit。创建一个ViewModel类并在对话框中显示该类。如果且仅当用户单击“确定”时,则将值复制回来。

您的CarViewModel需要实现INotifyPropertyChanged,以便在对话框中获得最佳的绑定效果......

dim car = ListBoxMain.SelectedItem as Car;
dim carVM as new CarViewModel
carVm.Make = car.Make
carVM.Color=car.Color}
dim win as new ChangeItemWindow()
win.DataContext = carVM
if win.ShowDialog() then
    car.Make = carVM.Make
    car.Color = carVM.Color
end if