【问题标题】:BindingList with IList<T> DataSource, Element OrderBindingList 与 IList<T> 数据源,元素顺序
【发布时间】:2011-07-17 07:38:20
【问题描述】:

当我将DataSource 用作BindingSource(Windows 窗体)的DataSource 时,我可以假设IList&lt;T&gt; 中元素的顺序保持不变,因此BindingSource.PositionList.IndexOf() 是等价的在同一个物体上?

这对我来说很重要,因为没有BindingList 的列表不支持Find,所以我使用普通的旧IList.IndexOf 方法来确定元素的位置:

myBindingSource.Position = myItemList.IndexOf(myItem);

显然这很好用。但我不知道我是否还不能弄清楚我是否真的可以依靠它来工作。我有点担心,因为BindingListList 属性会将数据复制到新的列表结构中(参见DataSource 备注)...

干杯,马蒂亚斯

【问题讨论】:

    标签: c# winforms data-binding ilist bindinglist


    【解决方案1】:

    是的,IList&lt;T&gt; 应该始终保持相同的顺序。这是超越IEnumerable&lt;T&gt;(就附加功能而言)的一步,它不保证排序,只是枚举集合的能力。 IList&lt;T&gt; 添加索引以支持更多功能,例如需要索引的.IndexOf().RemoveAt()

    现在,您填充 IList&lt;T&gt; 的数据源是否以相同的顺序返回项目,这是另一回事。

    【讨论】:

    • 谢谢,大卫。我从IList&lt;T&gt; 填充数据源(反之亦然)。不确定我是否准确地描述了这一点或误解了你。我很抱歉。无论如何,谢谢,所以你认为我不应该依赖 Index 和 Position 是等价的?
    • @Mudu:也许我不确定您在哪里寻找索引的不变性。但基本上,一旦IList&lt;T&gt; 的给定实现(假设实现本身没有损坏)被实例化,其中的任何给定元素在该对象的整个生命周期中都将具有相同的索引。 (当然,除非您添加/删除元素。)
    • 哎呀,我原来的问题中的致命错字:BindingSource,而不是BindingList(在上面更正)。我不确定DataSource 属性是否会弄乱元素顺序,因为数据(我想)在暴露给绑定控件之前从我的列表复制到IBindingList。但是,这两个都是列表,所以我现在有信心他们会保持订单,就像你在上面写的一样。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多