IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Comment permettre à un UserControl d'intercepter un évenement levé par un autre UserControl ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Par défaut Comment permettre à un UserControl d'intercepter un évenement levé par un autre UserControl ?
    Bonjour,

    Petite question concernant les evenements.
    Y a t'il un mecanisme simple pour permettre à un UserControl d'intercepter un évenement levé par un autre UserControl sachant qu'il ne sont pas dans le même arbre?

    D'habitude quand un UserControl contient l'autre je peux m'abooner facielment, horsd je ne sais pas comment faire quand ils ne sont pas parent/enfant.
    Quaelqu'un aurait il une piste svp?

  2. #2
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Par défaut
    Salut,
    T'as pensé à passer par le ViewModel? Si non est ce que le composant qui regroupe les deux UserControls ne pourrait pas gérer ce que tu veux faire?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Par défaut
    Voici un peu la structure de mes composants.


    En fait UserNewStepOne leve un event OnUserAdded.
    Si c'était UserNew qui devait l'intercepté il n'y aurait pas de soucis.
    Mais en l'occurence c'est à UserList de l'intercepter afin de pouvoir mettre à jour sa liste d'user.

    Hors je ne sais pas comment faire pour dire à UserList de s'abonner à l'évènement de OnUserAdded.
    Ne peut on pas lever un évènement qui va se propager à tous les UserControl et s'abonne qui veut? Un peut comme le principe des évènement clavier.
    Et je ne fait pas encore de MVVM donc pas de ViewModel.

  4. #4
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Par défaut
    Tu peux propager l’évent jusqu'au Main et dans le main tu appel une méthode sur le UserList ...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Par défaut
    On va dire que cette technique c'était ma solution de secours car jze troucve que c'est lourd à mettre en place. Mais s'il n'y a pas de solution plus simpliste je vais devoir passer par ça.


    EDIT
    En fait je viens d'essayer quelque chose qui fonctionne très bien.
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class EventTest
    {
    	public static event EventTestHandler OnTest; // L'évènement que l'on veut lever
    	public delegate void EventTestHandler(object sender, EventTestArgs args);
     
    	public static void Throw(object sender, EventTestArgs args)
    	{
    		if (OnTest != null)
    			OnTest(sender, args);
    	}
    }
     
     
    public class EventTestArgs : EventArgs
    {
    	public string ValueTest { get; set; }
     
    	public EventTestArgs(string valueTest)
    	{
    		ValueTest = valueTest;
    	}
    }

    Dans le UserControl appelant je fais ça:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void button1_Click(object sender, RoutedEventArgs e)
    {
     
    	EventTest.Throw(this, new EventTestArgs("Test"));
    }

    Et dans celui où jer désire reçevoir:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public partial class MonUserControl : System.Windows.Controls.UserControl
    {
    	public MonUserControl()
    	{	
    		InitializeComponent();
    		EventTest.OnTest += EventTest_OnTest;
    	}
     
    	private void EventTest_OnTest(object sender, EventTestArgs args)
    	{
    		Console.WriteLine("Victoire");
    	}
    }

    Je en sais pas se que vous en pensez et si c'est une bonne solution.
    N'hésitez pas à critiquer cette méthode.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Ba écoute tu utilises les events dans un cas tout à fait adapté à mon sens . Tout contrôle qui aura besoin de l'info, pourra s'abonner à l'événement.

Discussions similaires

  1. [Débutant] Evenement ecoutable par un autre UserControl
    Par Amine38 dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 15/06/2012, 10h31
  2. comment trier un fichier d'après un ordre fourni par un autre fichier
    Par jack-ft dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 18/03/2011, 13h37
  3. Réponses: 4
    Dernier message: 03/05/2008, 09h56
  4. Réponses: 7
    Dernier message: 03/10/2007, 17h58
  5. Comment lire un fichier DB en cours d'utilisation par 1 autr
    Par jbat dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo