【问题标题】:IEditableCollectionView & EntityFrameworkIEditableCollectionView & EntityFramework
【发布时间】:2013-06-29 12:47:25
【问题描述】:

我有一个带有 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”并且是“False”。

谢谢。

【问题讨论】:

  • 实现IEditableCollectionView的类是什么?是你的吗?

标签: .net wpf vb.net


【解决方案1】:

你应该调用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多