Bonjour,
Je viens de constater que si, pour un DropDownList, on change le dataprovider, et qu'on affecte en sélection la même valeur, celle ci ne se sélectionne pas. La DropDownList reste vide.
Voici le code d'un test:
Dans le cas présent, on passe par une variable intermédiaire bindable.
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
38
39
40
41 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.binding.utils.BindingUtils; import mx.collections.ArrayCollection; private var bool:Boolean = true; private var arrProvider2:ArrayCollection = new ArrayCollection(["Bernard", "Peter", "Quentin", "Marie"]); private var arrProvider1:ArrayCollection = new ArrayCollection(["Quentin", "Peter", "Sébastien", "Florine"]); [Bindable] private var item:String; [Bindable] private var arrProvider:ArrayCollection; protected function button1_clickHandler(event:MouseEvent):void { if (bool) { arrProvider = arrProvider2; item = "Peter"; } else { arrProvider = arrProvider1; item = "Peter"; } bool = !bool; btn.label = "switch dataprovider to " + (bool? "arr2": "arr1"); } ]]> </fx:Script> <s:VGroup paddingLeft="20" paddingTop="20"> <s:DropDownList id="dd" dataProvider="{arrProvider}" selectedItem="{item}" /> <s:Button id="btn" click="button1_clickHandler(event)" label="switch dataprovider to arr2"/> </s:VGroup> </s:Application>
Si, on affecte directement la valeur au DropDownList, ça fonctionne bien :
De même, si on repasse la variable "item" à vide avant de lui remettre "Peter" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part dd.selectedItem = "Peter";
Ou encore que un coup, c'est "Peter", un autre "Quentin" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 item = ""; item = "Peter";
On dirait, que la variable "item" blindable ne voit pas de changement de valeur, donc ne transmet pas l'affectation de la sélection.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if (bool) { arrProvider = arrProvider2; item = "Peter"; } else { arrProvider = arrProvider1; item = "Quentin"; }
Pouvez vous me donner votre avis sur ce phénomène?
Pourquoi dans le cas de mon test, la valeur "Peter" ne reste pas sélectionée?
Merci beaucoup!
Bonne soirée
Partager