J'ai une classe "partielle" dans VB.NET. La moitié est générée automatiquement par un outil de génération de code. Cette moitié implémente INotifyPropertyChanged, de sorte que les propriétés de cette partie de la classe partielle déclenchent l'événement PropertyChanged.Comment gérez-vous un événement déclenché dans votre classe à l'intérieur de votre propre classe?
Dans ma partie "personnalisée" de la classe, je déclare une autre propriété qui dépend de l'une des propriétés du côté généré automatiquement. Par conséquent, lorsque cette propriété générée automatiquement change, je souhaite également déclencher un événement PropertyChanged sur ma propriété personnalisée qui en dépend. Si j'entre dans la partie générée de la classe et que j'élève l'événement là-bas, cela sera écrasé si jamais je produis de nouveau cette partie, donc je ne veux pas faire ça. Je préfèrerais ajouter un gestionnaire d'événement de mon côté de la classe partielle qui vérifie si la propriété générée a changé, et si c'est le cas, déclencher un autre événement pour ma propriété personnalisée.
Je suis en train d'écrire ceci pour accrocher mon propre événement, mais il ne fonctionne pas:
Private Sub MyProperty_PropertyChangedHandler(_
ByVal sender As Object, ByVal e As PropertyChangedEventArgs _
) Handles Me.PropertyChanged
Select Case e.PropertyName
Case "AutoGenProperty"
RaiseEvent PropertyChanged(Me, _
New PropertyChangedEventArgs("MyProperty"))
End Select
End Sub
Je suppose que c'est parce que vous utilisez normalement le mot clé WithEvents pour indiquer au compilateur que vous » re souscrire à des événements de cet objet. Je n'ai pas la moindre idée de comment faire cela à l'intérieur de la classe qui soulève l'événement, ou même si c'est possible.
Avez-vous un contrôle sur le générateur de code? –
Dans ce cas particulier, oui, mais j'ai d'autres cas où je n'ai pas de contrôle, et je pourrais encore avoir le problème là. J'ai vu votre réponse plus tôt sur les méthodes partielles et commencé à regarder dans cela. Il semblerait que je devrais modifier la génération de code pour que cela fonctionne bien. –
Un bon exemple où vous n'auriez pas de contrôle est ADO.NET Entities. –