2011-03-14 4 views
0

해야합니다하여 PropertyChanged 이벤트가 발생 두번 나는 두 개의 하위 클래스 (자식, 손자)와 클래스를 가지고 있지

BaseSample 
    |-ProcessData 
     |-Measurement 

측정 클래스의 속성 변화는 내가 OnCrucibleOxidizedMassChanged 이벤트 올릴 때 :

Protected Sub AddEventHandler(ByVal thisMeasurement As CalcinerDataAccess.O2Measurement) 

    AddHandler thisMeasurement.PropertyChanged, AddressOf RaiseMassChanged 

End Sub 

Protected Sub RaiseMassChanged(ByVal sender As Object, ByVal e As EventArgs) 

    Dim CrucibleOxidizedMassReadyToReport As Boolean = _ 
     (TypeOf e Is System.ComponentModel.PropertyChangedEventArgs) AndAlso _ 
     (CType(e, System.ComponentModel.PropertyChangedEventArgs).PropertyName = "CrucibleOxidizedMass" And _ 
      CType(sender, CalcinerDataAccess.O2Measurement).CrucibleOxidizedMass IsNot Nothing) 

    If CrucibleOxidizedMassReadyToReport Then 
     RaiseEvent OnCrucibleOxidizedMassChanged(sender, e) 

    End If 

End Sub 

테스트 목적으로이 이벤트 발생 동작을 테스트하는 모듈이 있습니다. ToteBinSample은 BaseSample에서 상속받습니다. 내가 한 번만 CrucibleOxidizedMass에 값을 할당하더라도,

Sub Main() 


    thisSample = New SampleTypeManager.SampleTypes.ToteBinSample 
    AddHandler thisSample.OnCrucibleOxidizedMassChanged, AddressOf OnChanged 

    thisSample.SampleData.ProcessDatas(0).O2Measurements(0).CrucibleOxidizedMass = 20 

    Console.WriteLine("Done...") 
    Console.Read() 


End Sub 

Private Sub OnChanged(ByVal sender As Object, ByVal e As EventArgs) 

    Console.WriteLine("Time to send report!") 

End Sub 

그러나,는 onChanged 서브 두 번 호출됩니다 : 홈페이지()에서 나는 당신이 CrucibleOxidizedMass의 값을 변경할 때 발생하는 테스트를하고있다.

왜 두 번 해고되고 어떻게 해결할 수 있는지 알고 있습니까?

+0

초기 이벤트를 제기하는 위치를 표시 할 수 있습니까? – msarchet

+0

msarchet : CrucibleOxidizedMass 속성에 20의 값을 할당하면 Sub Main()에서 Measurement 클래스의 PropertyChanged 이벤트가 발생합니다. 이 클래스에서는 적절한 조건에서 OnCrucibleOxidizedMassChanged를 발생시키는 RaiseMassChanged 하위에 PropertyChanged 이벤트를 위임했습니다. 이 이벤트는 모듈의 OnChanged 하위가 호출되도록합니다 (그리고 "보고서를 보낼 시간"을 한 번만 인쇄하십시오). 희망이 내 문제를 명확히합니다. 감사. – blueshift

답변

0

내 실수를 찾았습니다. 나는 LINQ to SQL 클래스 인 O2Measurement의 OnCrucibleOxidizedMassChanged 하위 내에서 PropertyChanged 이벤트를 수동으로 발생 시켰습니다. 그래서 PropertyChanged 이벤트의 두 번째 실행이 발생했습니다. 고마워, msarchet, 그리고이 문제를 숙고 누가 다른 사람.

Partial Class O2Measurement 

    Private Sub OnCrucibleOxidizedMassChanged() 
     'Here is my mistake -- I have removed it in my code 
     RaiseEvent PropertyChanged(Me, New ComponentModel.PropertyChangedEventArgs("CrucibleOxidizedMass")) 

    End Sub 
End Class 
관련 문제