0

我有几个下拉列表控件,它们共享相同的数据提供者(相同的参考)。

我已经为排序函数覆盖了 set dataprovider 方法。(下面的代码)。问题是,当我将此共享 dataprovider 设置为新的下拉列表时,共享 dataprvider 的所有现有下拉控件都将被取消选择(丢失其先前选择的值)。

    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; 
    }
4

2 回答 2

1

有很多问题在组件之间共享 dataProvider。我们已经在许多使用我们的 AutoCompleteComboBox 的客户中遇到过这种情况。

您可以轻松地使用相同的源,但为每个 dataProviders 使用不同的——单独的——集合。

var dataProvider1 :ArrayCollection = new ArrayCollection(someArray);
var dataProvider2 :ArrayCollection = new ArrayCollection(someArray);
var dataProvider3 :ArrayCollection = new ArrayCollection(someArray);

每个集合只是基本源的包装。排序一个不会影响其他任何一个,使您的其他 ComboBoxes 或 DropDownLists 保持不变。

于 2012-12-28T03:03:57.647 回答
0

我对此没有进行任何研究,但出现了两个问题/想法:

  1. 如果您从字面上使用对相同数组集合的相同引用,则不需要多次对该数组进行排序(实际上您通过多次分配相同的数组集合来做到这一点)
  2. 如果它只有单选下拉菜单,那么有一个简单的解决方案:

    var oldSelected : TypeOfItem = selectedItem as TypeOfItem;
    // do the sort (like in your code)
    super.dataProvider=value;
    selectedIndex = getItemIndex(oldSelected);
    
于 2012-12-27T14:19:15.773 回答