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 :

[Evènement] Comment faire l'appel d'un évènement provenant d'une autre classe ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut [Evènement] Comment faire l'appel d'un évènement provenant d'une autre classe ?
    Bonjour,

    ce que je cherche à faire est assez simple. J'ai une listBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ListBox Loaded=""  Name="StockList" ItemsSource="{Binding Stocks}" />
    je voudrais, dans l'évènement Loaded, appeler la méthode "StockList_Loaded" se trouvant dans une autre classe qui ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public class Ctrl
        {
            public Ctrl() { }
     
            public void StockList_Loaded(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Youpi!");
            }
        }
    Je suis sûr que c'est tout bête mais je tourne en rond depuis quelques temps déjà...
    Antony, développeur .Net
    http://www.flecheinthepeche.fr/blog/

  2. #2
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    StockList_Loaded n'est pas une méthode mais un évènement déclenché lorsque la ListView est "loadée". Tu passes dedans à sa création en quelque sorte.

    Pour t'en sortir, tu peux peut-être faire comme ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            public void StockList_Loaded(object sender, RoutedEventArgs e)
            {
                FonctionLoaded();
            }
     
            public void FonctionLoaded()
            {
                MessageBox.Show("Youpi!");
            }

    Dans StockList_Loaded tu fais appel à une méthode "FonctionLoaded" et c'est cette même méthode que tu appelles dans ton autre évènement Loaded.

  3. #3
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    Oui j'y avais pensé mais c'est pas très propre

    En fait j'aimerai vraiment passer que par le code WPF. Dans ce cas n'est il pas possible de créer un évènement un peu comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <RoutedEventArgs Source="TaClasse" RoutedEvent="MonEvenement" x:Key="Evt"  />
    et dans la liste faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ListBox Loaded="Evt" Name="StockList" ItemsSource="{Binding Stocks}" />
    je n'arrive pas à le faire fonctionner mais ça doit bien etre possible ?!
    Antony, développeur .Net
    http://www.flecheinthepeche.fr/blog/

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    deja a priori il faudra que l'element soit connu du xaml
    donc definir ta classe ctrl dans les resources

    apres normalement on a les messages directement dans la fenetre

    si ton object est connu de la fenetre (je crois, mais j'ai pas verifié) que tu doit pouvoir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    loaded="ctrl.StockList_Loaded"
    avec dans ta fenetre soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ctrl ctrl { get { return this.Resources["ctrl"]; }
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public readonly ctrl ctrl = new ctrl();
    maitenant j'ai pas verifié
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  5. #5
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    Pas bête mais non ça ne compile pas j'ai toujours l'erreur suivante :

    Erreur 1 Erreur de génération inconnue, 'MC6005*: Loaded="ctrl.StockList_Loaded" n'est pas valide. 'ctrl.StockList_Loaded' n'est pas un nom valide de méthode de gestionnaire d'événement. Seules les méthodes d'instance de la classe générée ou code-behind sont valides. Ligne 38 Position 18.' C:\Documents and Settings\brugere_a\Bureau\ModelSample\ModelSample\App.xaml 38 18 ModelSample
    Antony, développeur .Net
    http://www.flecheinthepeche.fr/blog/

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par binoo Voir le message
    Salut,

    StockList_Loaded n'est pas une méthode mais un évènement déclenché lorsque la ListView est "loadée".
    Heu non, sur ce coup là, je ne suis pas d'accord. StockList_Loaded est un gestionnaire d'évènements soit une méthode qui est appelée lorsque l'évènement Loaded est déclenché.

  7. #7
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    Certes, mais ça ne résous pas pour autant mon problème

    ça ressemble un peu au modèle MVC ce que je veux faire, et j'ai trouvé très peu d'article sur le sujet avec WPF (ceux qui existent sont en anglais). Mais je me demande tout simplement si c'est possible. Peut-être en utilisant CommandManager comme le fait le monsieur ici : http://blogs.msdn.com/dancre/archive...ew-models.aspx

    seulement, dans l'exemple il ne redirige aucun évènement il se contente d'utiliser la propriété command du composant "bouton"
    Antony, développeur .Net
    http://www.flecheinthepeche.fr/blog/

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    bon j'ai cherche un poil mais je vois pas vraiment de solution autre que celle la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     public partial class Window1 : Window
        {
            public readonly Ctrl Ctrl = new Ctrl();      
     
            public Window1()
            {
                InitializeComponent();
                this.button1.Click += new RoutedEventHandler(Ctrl.StockList_Loaded);
            }
        }
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  9. #9
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    Oui c'est pas mal comme ça c'est même plutôt bien !

    Autre question, dans mon cas, ma listBox est définie dans une balise application.Ressource comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        <Application.Resources>  
            <!-- Data Template for individual stocks -->
             ....
        <DataTemplate DataType="{x:Type local:StockModel}">
                    <ListBox Name="StockList" ItemsSource="{Binding Stocks}" />
        </DataTemplate>
      </Application.Resources>
    Si je veux accéder à cette ListBox dans mon window1 je suis obligé d'utiliser ta fonction magique "FindVisualChild" ? J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public partial class Window1 : Window
        {
     
            public override void OnApplyTemplate()
            {
                base.OnApplyTemplate();
                ListBox list = (ListBox)this.FindName("StockList"); 
     
            }
     
        }
    mais ça ne fonctionne pas hélas....
    Antony, développeur .Net
    http://www.flecheinthepeche.fr/blog/

  10. #10
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     public partial class Window1 : Window
        {
            public readonly Ctrl Ctrl = new Ctrl();      
     
            public Window1()
            {
                InitializeComponent();
                this.button1.Click += new RoutedEventHandler(Ctrl.StockList_Loaded);
            }
        }

    Personnellement, je me dit que si tu as besoin de faire un truc de ce genre là, c'est que tu as un problème de conception/architecture...

  11. #11
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    uhm à voir les choses que par ce bout de code je veux bien croire que tu penses ça. Mais ce que je veux faire c'est un modèle vue controleur. Et dans ce cas là c'est parfait :

    J'ai ma vue d'un coté (mes ressources), mon contrôleur (Ctrl) et après je pourrais créer une classe Model

    ça te parais toujours un peu bizarre ?
    Antony, développeur .Net
    http://www.flecheinthepeche.fr/blog/

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    Personnellement, je me dit que si tu as besoin de faire un truc de ce genre là, c'est que tu as un problème de conception/architecture...
    personnelement dans le cas d'un heritage par possession et concernant la diffusion, a par faire une capture de message dans la fenetre puis d'appeler la methode de ctrl je vois pas trop comment faire, evidement cela eut ete mieux si le binding etait possible en profondeur
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  13. #13
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Heu non, sur ce coup là, je ne suis pas d'accord. StockList_Loaded est un gestionnaire d'évènements soit une méthode qui est appelée lorsque l'évènement Loaded est déclenché.
    C'est vrai

Discussions similaires

  1. Appel d'interface a partir d'une autre classe
    Par harris_macken dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 20/07/2009, 15h31
  2. appel d'un vector créé dans une autre classe
    Par julien25 dans le forum C++
    Réponses: 18
    Dernier message: 22/03/2009, 18h47
  3. Réponses: 23
    Dernier message: 31/05/2007, 16h09
  4. [VB.NET] Comment faire un appel de fonction ?
    Par Webman dans le forum ASP.NET
    Réponses: 4
    Dernier message: 18/05/2004, 10h06

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