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

Flex Discussion :

ItemRenderer Changement d'une propriété lors de la sélection d'un item


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Par défaut ItemRenderer Changement d'une propriété lors de la sélection d'un item
    Bonjour,

    J'utilise au sein de mon application un itemRenderer. Voici de manière simplifié mon code :

    - La Composant contenant une liste qui utilise mon itemRenderer :

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
     
      <mx:Script>
    		<![CDATA[
     
    			[Bindable] public var monBean:Bean;
     
    		]]>
    	</mx:Script>
     
      <mx:List id="myList"
    					 dataProvider="{monBean.databean}"
    					 textSelectedColor="{monBean.colorSelected}"
    					 color="{monBean.colorUnselect}"
    					 itemRenderer="{new ClassFactory(MyItemRenderer)}">
    	</mx:List>
     
    </mx:Canvas>

    - Un apercu de la classe Bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [Bindable]
    class Bean {
        private var colorSelected:uint;
        private var colorUnselect:uint;
        private var databean:ArrayCollection;
     
        /* Getter et setter des proprietes A et B*/
     
    }
    - Et enfin le code de mon itemRenderer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
    		 verticalScrollPolicy="off" horizontalScrollPolicy="off">
     
    	<mx:Image id="img" source="@Embed('style/images/inte.png')" horizontalCenter="0" verticalCenter="0" width="30" height="30" />
    	<mx:VBox width="100%" height="100%" verticalAlign="middle">
    		<mx:Label id="myLabel" text="{data.title}" />
    	</mx:VBox>
     
    </mx:HBox>
    Tout fonctionne correctement, mes données sont correctement affichées...

    Je souhaiterais que lors d'un click sur un élément de ma liste le label de mon itemRenderer change de couleur (et prendre la propriété colorSelected de mon bean).

    Car actuellement, le fait de changer la propriété textSelectedColor de la liste n'influe pas du tout sur l'itemRenderer (ce qui est logique).

    Quelqu'un a une idée de la manière dont je doit m'y prendre ? Car je suis un peu perdu.

    Merci.

  2. #2
    Membre expérimenté Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Par défaut
    Bonjour, j'espere ke je ne vais pas dire des betises

    ben normalement tu as un evenemnt de type ListEvent.itemClick ou un truc comme ca que tu peux ajouter à ton composant list

    maintenant tu rajoute une fonction qui te donne le owner de ton itemRenderer en gros ddans ta classes itemRenderer tu rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected function get ownerAsList():List {
        return (this.owner as List);
    }
    apres tu rajoute un ecouteur à ton owner sur l'evenement ci-dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    override public function set owner(value:DisplayObjectContainer):void {
    			super.owner = value;
     
    			if (! ownerAsList)
    				return ;
     
    ownerAsList.addEventListener(ListEvent.ITEM_CLICK, changeColorLabel);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private function changeColorLabel(anEvent : ListEvent):void
    {
        myLabel.setstyle("selectedColor", ownerAsList.monBean.colorSelected)
    }
    je ne sais pas si ca va marcher mais le but c'est juste d'avoir une reference du owner dans ton itemRenderer comme tu peux acceder au propriétés et methodes public du owner

    bon courage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Par défaut
    merci samy2525 pour ta réponse très rapide,

    Cependant, cela ne marche pas parfaitement. Suivant tes conseils j'ai modifié mon itemRenderer :
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
    		 verticalScrollPolicy="off" horizontalScrollPolicy="off">
     
    		 	<mx:Script>
    		  <![CDATA[
    			import mx.events.ListEvent;
    			import mx.controls.List;
     
    			protected function get ownerAsList():List {
     			   return (this.owner as List);
    			}
     
    			override public function set owner(value:DisplayObjectContainer):void {
    				super.owner = value;
    				if(!ownerAsList)
    					return;
    			 	ownerAsList.addEventListener(ListEvent.ITEM_CLICK,changeColor);
    			}	
     
    			protected function changeColor(anEvent : ListEvent):void {
    				  myLabel.setStyle("color",0xFF0000);
    			}
    		]]>
    	</mx:Script>
     
    	<mx:Image id="img" source="@Embed('style/images/inte.png')" horizontalCenter="0" verticalCenter="0" width="30" height="30" />
    	<mx:VBox width="100%" height="100%" verticalAlign="middle">
    		<mx:Label id="myLabel" text="{data.title}" />
    	</mx:VBox>
     
    </mx:HBox>
    Remarque : j'ai mis setStyle("color",...) au lieu de selectedColor.

    Cependant, lorsque je clique maintenant sur un item de ma liste, tous les labels changent de couleur. Or je souhaiterai que seul l'item sélectionné change de couleur.

    De plus, je ne sais pas comment passer mon objet Bean à l'itemRenderer.

    Merci encore

  4. #4
    Membre expérimenté Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Par défaut
    en faite, j'ai oublié de te dire de rajouté ce test dans la fonction changeColor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private function changeColorLabel(anEvent : ListEvent):void
    {
       if (data == anEvent.itemRenderer.data)
    {
       myLabel.setstyle("color", ownerAsList.monBean.colorSelected)
    } 
     
    }
    aussi de mémoire il me semble qu'il faut rajouter le set data qui contient les information de la ligne en cours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    override public function set data(value:Object):void {
     
    	super.data = value;
     
    }
    avec ça je pense que ça devrai aller, par contre je ne comprends pas pourquoi tu veux passer le bean à ton itemRenderer du moment où tu possede une reference sur l'objet qui contient l'itemRenderer tu peux facilement accéder à ses propriéts public, sauf si j'ai pas bien compris ta demande !!!

    bon courage

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Par défaut
    Merci encore pour tes conseils...Tout fonctionne comme je le souhaite

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Par défaut
    Autre petite question, y-a t'il la possibilité que mon listener ne se fasse pas sur un CLICK sur un item mais lorsque le selectedIndex de ma liste change ?

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/10/2014, 14h54
  2. Réponses: 3
    Dernier message: 21/07/2013, 05h56
  3. Réponses: 1
    Dernier message: 11/10/2011, 22h38
  4. [WCF] notification sur le changement d'une propriété.
    Par maa dans le forum Windows Communication Foundation
    Réponses: 6
    Dernier message: 23/03/2008, 11h19
  5. Réponses: 1
    Dernier message: 06/06/2007, 12h56

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