ObservableCollection自动索引

时间:2010-09-01 17:45:08

标签: c# wpf xaml observablecollection

我有一个项目列表,我将它放在一个ObservableCollection中,然后我将数据绑定到在XAML中创建的数据网格UI。显示的列之一是列表中项目的索引。目前,我正在创建一个属性并绑定它。但是,当我需要更新/添加/删除列表中的项目时,这会产生大量工作 - 我必须浏览所有受影响的项目并更改其属性。我的问题是:有没有办法在UI中自动显示集合中项目的索引?

2 个答案:

答案 0 :(得分:2)

您可以使用转换器进行绑定,转换器会执行查找以查找索引。然后,无论您的项目位于集合中的哪个位置,您都将拥有正确的索引。

答案 1 :(得分:1)

您是否考虑过在顶层实现一个viewmodel?然后你可以显示你想要的ObservableCollection并在封面下实现它

public class IndexedObject
{

    private object _rootObject;
    private int _index;

    public IndexedObject(object rootObject, int index)
    {
        _rootObject = rootObject;
        _index=index;
    }

    public string Value
    {
        get
        {
            return _rootObject.ToString();
        }
    }

    public int Index
    {
        get
        {
            return _index;
        }
    }
}

然后,您可以在类或显示ObservableCollection

的类上实现此属性
    ObservableCollection<object> _yourCollection;

    public IEnumerable<IndexedObject> IndexedObjects
    {

        get
        {
            for (int i = 0; i < _yourCollection.Count; i++)
            {
                yield return new IndexedObject(_yourCollection[i], i);
            }
        }
    }

然后,您将使ObservableCollection collectionchanged事件通知程序您的IndexedObjects属性已更改。然后你可以绑定到IndexedObjects属性并使用Index属性,而不管下面的实际集合是什么样的:)