2010-11-25 4 views
2

Dans WPF, vous pouvez définir un gestionnaire d'événements en XAML (par exemple, SelectionChanged de ComboBox), ce qui est génial. Cependant, le problème que je rencontre est que l'événement est déclenché trop tôt. Il est câblé lorsque le contrôle est créé. Par conséquent, si un autre contrôle en dessous de ce code est référencé dans le gestionnaire d'événements, vous obtiendrez une exception null. Je me suis retrouvé avec beaucoup de vérifications nuls dans mon gestionnaire d'événements, ce qui serait inutile sinon. Je souhaite que tous les événements soient connectés après la création de tous les contrôles (par exemple, OnInitialized). Y a-t-il un moyen de le faire? Ou ai-je manqué quelque chose ici?WPF: Comment retarder le déclenchement d'un événement défini en XAML?

+1

pouvez-vous poster votre code? reliez-vous SelectedItem à quoi que ce soit? – Vitalik

Répondre

2

Je pense que la meilleure solution consiste à définir ces gestionnaires d'événements dans le code derrière vous, après l'appel InitializeComponent() dans le constructeur. Bien sûr, ce ne sera plus XAML, mais c'est le seul moyen de s'assurer que tous les contrôles que vos gestionnaires peuvent référencer ont déjà été créés.

+0

Merci pour le conseil. La plupart des gestionnaires d'événements sont définis de cette façon. Cependant, d'une certaine manière, je pense qu'il est un peu plus propre de laisser ces gestionnaires déclarés en XAML (comme dans le concepteur WinForm). Je veux le rendre cohérent, donc je dois choisir dans un sens ou dans l'autre pour l'ensemble du projet. – newman

0

Vous pouvez vérifier la propriété IsLoaded de votre contrôle principal au début de votre gestionnaire d'événements et la renvoyer si elle est fausse. Donc, quand c'est vrai, vous serez sûr que tout est créé et prêt pour l'interaction.

+0

Merci pour le conseil sur la propriété IsLoaded. – newman

+0

Le problème avec cette approche est que je ne peux pas compter sur ces événements pour installer correctement au démarrage, et j'ai besoin d'appeler le handle d'événement explicitement. – newman

Questions connexes