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:
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>
Dans le cas présent, on passe par une variable intermédiaire bindable.
Si, on affecte directement la valeur au DropDownList, ça fonctionne bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
dd.selectedItem = "Peter";
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
1
2
item = "";
item = "Peter";
Ou encore que un coup, c'est "Peter", un autre "Quentin" :
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";
}
On dirait, que la variable "item" blindable ne voit pas de changement de valeur, donc ne transmet pas l'affectation de la sélection.

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