如何在我添加的部分类中的实体模型的生成代码中实现OnPropertyChanged事件

时间:2014-06-27 15:21:37

标签: vb.net entity-framework

我有一个使用Devart的Entity Developer构建的实体数据模型。它是数据库的第一个模型,我设置模板属性来实现INotifyPropertyChanged(和Changing),并为模型中的每个实体创建单独的部分类。

在构建模型后,我现在在模型中查看一些自动生成的代码,用于实体的属性,如下所示:

Public Overridable Property Rc() As Global.System.Nullable(Of Integer)
        Get
            Return _Rc
        End Get
        Set
            If (Object.Equals(_Rc, value) = false) Then
              OnPropertyChanging("Rc")
              _Rc = value
              OnPropertyChanged("Rc")
            End If
        End Set
    End Property
    Private _Rc As Global.System.Nullable(Of Integer)

以及与INotifyPropertyChanged和Changing:

相关的更多部分
        #Region "INotifyPropertyChanging Members"

    Public Event PropertyChanging(sender As Object, e As PropertyChangingEventArgs) Implements INotifyPropertyChanging.PropertyChanging

    Protected Sub OnPropertyChanging(propertyName As String)
        RaiseEvent PropertyChanging(Me, New PropertyChangingEventArgs(propertyName))
    End Sub

    #End Region
    #Region "INotifyPropertyChanged Members"

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

    Protected Sub OnPropertyChanged(propertyName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    End Sub

模型为这个实体创建了一个单独的部分类,我假设应该在那个部分类中,我应该放置任何我希望对OnPropertyChanged作出反应的代码。例如,如上面的代码片段中所示的属性(通常以2014年的形式表示一年),我想将另一个实体属性的值设置为2014 + 5,即2019年。

有人可以向我解释我应该怎么做。如果可能,我更喜欢vb,但可以使用c#。

由于

1 个答案:

答案 0 :(得分:1)

为了将来某些人可能会遇到的其他人的利益。

我在自己的项目中构建了一个实体模型(实际上它实际上是一个单独的数据层),用于我正在构建的几个解决方案。每个实体都有自己独立的部分类,我在其中添加自定义代码。我知道我需要在那个部分课程中处理PropertyChanged事件,但我一直在努力“看到'哪个财产引发了这一事件。

事实证明,我犯了一个简单但根本的错误。最初我创建了以下方法:

Private Sub OnPropertyChangedLogicImplementation(sender As Object, e As EventArgs) Handles Me.PropertyChanged
     Select Case e.PropertyName

    Case 
    End Select

End Sub

它没有工作的原因是我使用了EventArgs而不是PropertyChangedEventArgs,它根本无法获取我期望能够获取的属性名称。

Private Sub OnPropertyChangedLogicImplementation(sender As Object, e As PropertyChangedEventArgs) Handles Me.PropertyChanged
     Select Case e.PropertyName

    Case 
    End Select

End Sub

奇怪的是,我能找到的如何做到这一点的直接例子的方式很少,因此我原来的问题。希望这会拯救别人浪费时间寻找痛苦的显而易见的事情(当然,你会意识到这很痛苦!)。