我有几个dropdownlist控件,它们共享相同的dataprovider(相同的引用)。
我已经覆盖了排序函数的set dataprovider方法。(下面的代码)。问题在于,当我将此共享数据提供者设置为新的下拉列表时,共享数据转换器的所有现有下拉控制都将被取消选择(丢失其先前选择的值)。
override public function set dataProvider(value:IList):void{
if(value is ArrayCollection){
var sort:Sort=new Sort();
var sortField:SortField = new SortField();
sortField.numeric=false;
sort.fields=[sortField];
ArrayCollection(value).sort=sort;
ArrayCollection(value).refresh();
}
super.dataProvider=value;
}
答案 0 :(得分:1)
在组件之间有大量的isues共享dataProvider。我们与很多客户使用我们的AutoCompleteComboBox遇到了这个问题。
您可以轻松地为每个dataProvider使用相同的源,但使用不同的 - 单独的 - 集合。
var dataProvider1 :ArrayCollection = new ArrayCollection(someArray);
var dataProvider2 :ArrayCollection = new ArrayCollection(someArray);
var dataProvider3 :ArrayCollection = new ArrayCollection(someArray);
每个集合只是基础源的包装器。对其中一个进行排序不会影响其他任何一个,使您的其他ComboBox或DropDownLists保持不变。
答案 1 :(得分:0)
我没有对此进行过研究,但有两个问题/想法即将出现:
如果它只涉及单选下拉菜单,那么有一个简单的解决方案:
var oldSelected : TypeOfItem = selectedItem as TypeOfItem;
// do the sort (like in your code)
super.dataProvider=value;
selectedIndex = getItemIndex(oldSelected);