【发布时间】:2014-12-18 13:07:16
【问题描述】:
我在添加处理程序时遇到问题:我解释一下
这是中介类
Public Class ContratClassiqueViewModel
Implements IMediatorContratClassique
Public objucPTClassiqueViewModel As ucPTClassiqueViewModel
#Region "Constructors"
Sub New(ByVal CtxViewModel As CtxViewModel, ByVal ucPlancheTravaux As ucPTClassiqueViewModel)
objCtxViewModel = CtxViewModel
objucPTClassiqueViewModel = ucPlancheTravaux
objucPTClassiqueViewModel.AddHandlers()
AddingHandlers()
End Sub
Sub New()
objucPTClassiqueViewModel = New ucPTClassiqueViewModel(True)
objucPTClassiqueViewModel.AddHandlers()
AddingHandlers()
End Sub
#End Region
Private Sub AddingHandlers()
AddHandler objucPTClassiqueViewModel.ChangeDateRealisation, AddressOf OnChangeDateRealisation
End Sub
Private Sub OnChangeDateRealisation(ByVal DatRealisation As Date?)
Messagebox.Show("Raised")
End Sub
End Class
另一个类:
Public Class ucPTClassiqueViewModel
Implements IMediatorContratClassique
Public objucParamPTViewModel As ucParamPTViewModel
Sub New()
End Sub
Sub New(ByRef flag As Boolean)
objucParamPTViewModel = New ucParamPTViewModel
End Sub
Public Sub AddHandlers()
AddHandler objucParamPTViewModel.ChangeDateRealisation, AddressOf OnChangeDateRealisation
End Sub
Private Sub OnChangeDateRealisation(ByVal DatRealisation As Date?)
RaiseEvent ChangeDateRealisation(DatRealisation)
End Sub
End class
问题是:当程序使用ContratClassiqueViewModel类的默认构造函数时,它可以工作,但如果它使用其他构造函数:
Sub New(ByVal CtxViewModel As CtxViewModel, ByVal ucPlancheTravaux As ucPTClassiqueViewModel)
objCtxViewModel = CtxViewModel
objucPTClassiqueViewModel = ucPlancheTravaux
objucPTClassiqueViewModel.AddHandlers()
AddingHandlers()
End Sub
方法:
Private Sub OnChangeDateRealisation(ByVal DatRealisation As Date?)
Messagebox.Show("Raised")
End Sub
永远不会到达,因为它似乎将处理程序添加到ucPTClassiqueViewModel 的另一个实例。所以我需要知道:
- 为什么会这样?
- 我该如何解决?
【问题讨论】:
-
你不应该“重新附加”
objucPTClassiqueViewModel,这应该是班级自己的责任(也不要忘记之后再次删除处理程序!)还有一种方法可以向我们展示您如何使用这些课程?由于它是您的程序,我会假设您可以选择是否将相同的视图模型实例提供给您创建的孩子,所以我不明白您为什么在构造函数之间切换?