Как получить объект для прослушивания события его свойства? - PullRequest
0 голосов
/ 15 декабря 2009

У меня есть объект типа SomeObject, с событием StatusChanged.

У меня есть свойство в SomeObject типа Status, также с событием StatusChanged.

Внутри приватной функции в SomeObject я бы хотел запустить некоторую логику (включая запуск события StatusChanged) в случае, если Status запустил своего StatusChanged события. Я был вдали от событий какое-то время, так что это немного облачно для меня. Как мне это сделать?

Я пишу в ASP.NET/VB.NET

Спасибо:)

РЕДАКТИРОВАТЬ Хорошо, если я не могу выполнить вышеизложенное, как я могу заставить внешний объект (SomeObject) запускать событие StatusChanged, когда внутренний объект (* 1026) *) запускает его StatusChanged событие?

1 Ответ

1 голос
/ 15 декабря 2009

События не работают таким образом. Вы не можете выполнять логику в зависимости от того, было ли запущено событие . Вы можете написать логику, которая имеет место , когда событие происходит.


Хорошо, вот попытка. Я давно уже делал это в VB.NET:

Public Enum CurrentStatus
    Good
    Bad
End Enum

Public Class StatusEventArgs
    Inherits EventArgs
    Private _currentStatus As CurrentStatus

    Public Property CurrentStatus() As CurrentStatus
        Get
            Return _currentStatus
        End Get
        Set(ByVal value As CurrentStatus)
            _currentStatus = value
        End Set
    End Property
End Class

Public Class StatusClass
    Public Event StatusChanged As EventHandler(Of StatusEventArgs)

    Protected Overridable Sub OnStatusChanged(ByVal newStatus As CurrentStatus)
        Dim s As New StatusEventArgs()
        s.CurrentStatus = newStatus
        RaiseEvent StatusChanged(Me, s)
    End Sub
End Class

Public Class SomeClass
    Private _status As StatusClass
    Public Event StatusChanged As EventHandler(Of StatusEventArgs)

    Protected Overridable Sub OnStatusChanged(ByVal newStatus As CurrentStatus)
        Dim s As New StatusEventArgs()
        s.CurrentStatus = newStatus
        RaiseEvent StatusChanged(Me, s)
    End Sub

    Public Property Status() As StatusClass
        Get
            Return _status
        End Get
        Set(ByVal value As StatusClass)
            If Not _status Is Nothing Then
                RemoveHandler _status.StatusChanged, AddressOf StatusHandler
            End If

            _status = value

            If Not _status Is Nothing Then
                AddHandler _status.StatusChanged, AddressOf StatusHandler
            End If
        End Set
    End Property

    Private Sub StatusHandler(ByVal sender As Object, ByVal e As StatusEventArgs)
        OnStatusChanged(e.CurrentStatus)
    End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...