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

Silverlight Discussion :

UserControl et son parent


Sujet :

Silverlight

  1. #1
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut UserControl et son parent
    Bonjour a tous,

    J'utilise sl2.0 avec une page et de nombreux usercontrols qui sont déclarés dans mon code xaml et masqués...

    En fonction de l'utilisation, ma page principale les affiche ou les masque...
    mon probleme est que je voudraislancer une méthode de ma page principale depuis mon usercontrol.

    Par exemple, sur mon usercontrol 1, j'ai une méthode X qui récupère un objet ; je voudrais que cet objet soit transféré automatiquement à une méthode de ma page maitre qui va masque le usercontrol actuel pour en afficher un autre ....

    si quelqu'un sait comment faire... merci d'avance !!

    Bonne soirée

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Utilises les évènements.

    Ton UserControl déclanche un évènement au moment où la méthode X récupère un objet. La page principale s'abonne à cet évènement et récupère l'objet.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    c'est ce côté gestion d'evenement que j'ai du mal à saisir malgré les différentes consultations internet.....
    gérer la reconnaissance d'un evenement encore ca va, mais c'est d'envoyer un objet de mon usercontrol à ma main page qui me pose probleme

    si quelqu'un avait un petit exemple simple à me montrer je suis preneur...

    merci d'avance

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Tu déclares l'évènement dans le UserControl (plus de la plomberie autour) et tu crées une classe héritant de EventArgs permettant de stocker l'objet à renvoyer.
    Code : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
        public class MonUserControl
        {
            //déclaration de l'évènement
            public event EventHandler<MonObjetSelectedEventArgs > MonObjetSelectedCompleted;
     
            void MaMethodeX()
            {
                 //récupération de l'objet
                 TypeDeMonObjet monObjet =  blabla
     
                 // on lève l'évènement
                 OnMonObjetSelectedCompleted(monObjet);
            }
     
            //méthode permettant de lancer l'évènement MonObjetSelectedCompleted
            protected virtual void OnMonObjetSelectedCompleted(TypeDeMonObjet monObjet)
            {
                EventHandler<MonObjetSelectedEventArgs> handler = MonObjetSelectedCompleted;
                if (handler != null)
                {
                    handler(this, new MonObjetSelectedEventArgs (monObjet));
                }
            }
        }
     
        // classe servant d'argument à l'évènement
        public class MonObjetSelectedEventArgs : EventArgs
        {
            public TypeDeMonObjet MonObjet { get; private set; }
     
            //constructeur
            public MonObjetSelectedEventArgs(TypeDeMonObjet monObjet )
            {
                MonObjet = monObjet ;
            }
        }
    Dans la page principale tu t'abonnes à l'évènement du UserControl et tu récupères l'objet via le paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MonUserControl uc = new MonUserControl();
    uc.MonObjetSelectedCompleted += MonHandler;
     
    void MonHandler(object sender, MonObjetSelectedEventArgs e)
            {
                if (e.MonObjet == null)
                {
                    //j'ai l'objet renvoyé par le userControl
                }
            }
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    merci pour ton aide...
    j'ai réussi en adoptant la solution suivante :

    côté usercontrol :
    Code : 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
    public class MyUserControl : Usercontrol
    {
         public event RoutedEventHandler MyEvent;
     
         public MyUserControl
         {
                 this.Loaded += OnLoaded;
         }
     
         private void OnLoaded(object sender, RoutedEventArgs e)
         {
              MyObject x = new MyObject();
     
               if(MyEvent != null)
                  MyEvent(x, null);
         }
    }
    et côté main page :

    Code : 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
    Public class MyMainPage : UserControl
    {
          public MyMainPage
          {
                 ctlMyUserControl.MyEvent += DoSomething;
          }
     
          private void DoSomething(object sender, RoutedEventsArgs e)
          {
                MyObject y = sender as MyObject
     
                if(y != null)
                {
                      // Do something with y
                }
          }
    }
    ca marche nickel comme ca !!!
    (le code provient du forum silverlight )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remonter d'un UserControl à son "parent"
    Par Tuttu dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 15/05/2010, 10h50
  2. Nested class: accéder à son parent
    Par Chii-san dans le forum VB.NET
    Réponses: 5
    Dernier message: 06/06/2007, 13h52
  3. [C#]Ouvrir un form à la même position que son parent.
    Par pierre1256 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 31/05/2006, 16h44
  4. <object> : récupérer son parent / changer son contenu
    Par benj63 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/05/2006, 18h24
  5. [ SWING ] Ouvrir une fenêtre dans son parent
    Par Invité dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 12/01/2006, 16h12

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