2010-09-01 48 views
0

我有一個項目列表,我放在ObservableCollection中,然後將數據綁定到在XAML中創建的數據網格UI。顯示的其中一列是列表中項目的索引。目前,我正在創建一個屬性並對其進行綁定。不過,當我需要更新/添加/刪除列表中的項目時,這會產生很多工作 - 我必須檢查所有受影響的項目並更改其屬性。我的問題是:有沒有辦法自動顯示UI中的集合中的項目的索引?ObservableCollection自動索引

+0

[請參閱此問題](http://stackoverflow.com/questions/3451422/wpf-bind- to-item-index-from-within-itemtemplate-of-itemscontrol /) – 2010-09-01 19:16:18

+0

這是有效的。您需要綁定到DataGridRow AlternationIndex。 – mdm20 2010-09-01 19:33:09

+0

這看起來正是我所需要的。但是,我使用的特定控件是RadTreeListView,我似乎無法得到AlternationIndex。有任何想法嗎? – jaws 2010-09-02 18:36:44

回答

2

您可以使用Converter進行綁定,您的轉換器將執行查找以查找索引。然後,無論您的物品位於藏品的哪個位置,您都會擁有正確的索引。

+0

所以我實現了這一點,但是當從列表中添加/刪除項目時,不會自動調用Converter。例如,當我刪除一個項目時,它下面的所有項目都保留其舊的索引值。 – jaws 2010-09-02 18:36:00

+0

聽起來像它沒有更新集合更改事件,聽起來像你需要附加一個處理程序,並在它內部強制更新。 – 2010-09-02 20:52:06

1

你有沒有考慮在頂端實現一個視圖模型?然後,你可以展示你的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屬性,而不管下面的實際集合是什麼樣子:)