我有一个使用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#。
由于
答案 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
奇怪的是,我能找到的如何做到这一点的直接例子的方式很少,因此我原来的问题。希望这会拯救别人浪费时间寻找痛苦的显而易见的事情(当然,你会意识到这很痛苦!)。