यहाँ एक विधि मैं एक संग्रह आइटम पर एक bindable सूचकांक जोड़ने के लिए प्रयोग किया जाता है। मैं मूल रूप से अपने आइटम को एक कंटेनर में लपेटता हूं जिसमें एक इंडेक्स होता है, और एक कस्टम ऑब्जर्जेबल कोलेक्शन होता है जो रैपर स्वीकार करता है।
ध्यान दें कि MoveItem ओवरराइड नहीं है, लेकिन इसे पूर्ण कार्यान्वयन के लिए होना होगा।
public class IndexedItemContainerCollection<T> : ObservableCollection<IndexedItemContainer<T>>
{
public IndexedItemContainerCollection()
{
}
public IndexedItemContainerCollection(IEnumerable<IndexedItemContainer<T>> collection)
: base(collection)
{
var index = 0;
foreach (var item in this)
{
item.Index = index;
}
}
protected override void InsertItem(int index, IndexedItemContainer<T> item)
{
item.Index = index;
base.InsertItem(index, item);
foreach (var indexedItem in this.Where(x=>x.Index > index))
{
indexedItem.Index++;
}
}
protected override void RemoveItem(int index)
{
base.RemoveItem(index);
foreach (var indexedItem in this.Where(x => x.Index > index))
{
indexedItem.Index--;
}
}
}
public class IndexedItemContainer<T>
{
public int Index { get; set; }
public T Item { get; set; }
}
मैं तो एक bindable संपत्ति मैं कैसे सूचकांक प्रदर्शित किया जाता है पर नियंत्रण है कि प्राप्त करने के लिए अपना आवरण वर्ग का विस्तार:
public class NamedIndexedItemContainer<T> : IndexedItemContainer<T>
{
public string Name
{
get { return string.Format("Item #{0}", Index + 1); }
}
}
नमूना प्रयोग
XAML:
<ComboBox ItemsSource="{Binding ItemList}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
कोड:
private IndexedItemContainerCollection<MyItem> _itemList;
public IndexedItemContainerCollection<MyItem> ItemList
{
get { return _itemList; }
set { _itemList= value; OnPropertyChanged(); }
}
ItemList = new IndexedItemContainerCollection<MyItem>();
var newItem = new NamedIndexedItemContainer<MyItem>() { Item = new MyItem() { ... } };
ItemList.Add(newItem);
बेशक
, किसी भी वास्तविक MyItem उदाहरण के साथ बंधन IndexedItemContainer के आइटम संपत्ति के माध्यम से जाना होगा।
धन्यवाद, यह मेरी स्थिति में ठीक काम करता है! – Rachel
ऐसा मत करो। Http://stackoverflow.com/questions/6511180/wpf-itemscontrol-the-current-listitem-index-in-the-itemssource/17962582#17962582 – bradgonesurfing
सहायक है, लेकिन यह 0 से शुरू होता है, जो तब तक बहुत उपयोगी नहीं होता है यूआई प्रोग्रामर के लिए डिज़ाइन किया गया है। मुझे लगता है कि ज्यादातर लोग इसे चाहते हैं कि यह 1 से शुरू हो। – Chris