Ben bir koleksiyon öğe üzerinde bir bağlanabilir indeksi eklemek için kullanılan bir yöntemdir. Öğemi temel olarak bir dizini olan bir kapsayıcıya sardım ve sarıcıyı kabul eden özel bir GözlemlenebilirKoleksiyon var.
MoveItem'un geçersiz kılındığını, ancak tam bir uygulama için olması gerektiğini unutmayın.
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; }
}
Sonra ben endeksi nasıl görüntüleneceğini üzerinde kontrole sahip bir bağlanabilir özelliği alma benim sarıcı sınıfını genişletmek:
public class NamedIndexedItemContainer<T> : IndexedItemContainer<T>
{
public string Name
{
get { return string.Format("Item #{0}", Index + 1); }
}
}
Örnek Kullanım
XAML:
<ComboBox ItemsSource="{Binding ItemList}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Kod:
Tabii
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);
, fiili MyItem örneği ile bağlayıcı herhangi IndexedItemContainer en Ürün mülkiyet geçmesi gerekecekti.
Teşekkürler, bu benim durumumda gayet iyi çalıştı! – Rachel
Bunu yapma. Bkz. Http://stackoverflow.com/questions/6511180/wpf-itemscontrol-the-current-listitem-index-in-the-itemssource/17962582#17962582 – bradgonesurfing
Yardımsever, ancak 0'da başlıyor, bu çok yararlı değil. UI programcılar için tasarlanmıştır. Ben bunu istemek çoğu insan 1. 1'de başlamak istiyorum istiyorum. – Chris