Я привязываю ObservableCollection с ключом/значением → int (индекс) и строку к текстовому полю в ItemControl.
<TextBox Text="{Binding Path=Value , Mode=OneWay}" />
Если вы нажмете кнопку в ItemsControl, вы можете удалить элемент в коллекции.
private ObservableCollection<KeyValuePair<int, String>> testlist;
public ObservableCollection<KeyValuePair<int, String>> TestList
{
get { return testlist; }
set {
testlist = value;
NotifyPropertyChanged("TestList");
}
}
public void DeleteItem(int index)
{
TestList.RemoveAt(index);
}
Теперь я хочу перенумеровать индекс (int) коллекции, например:
Как я могу это сделать?
Создайте новый ObservableCollection
после удаления элемента:
Testlist.RemoveAt(1);
Testlist = new ObservableCollection<KeyValuePair<int, string>>(Testlist
.OrderBy(kvp => kvp.Key)
.Select((kvp, seq) => new KeyValuePair<int, String>(seq, kvp.Value)));
Заметки
Select
перегрузку, которая обеспечивает индекс элемента. Предполагается нумерация с нуля. Вы можете сделать это с помощью foreach
, но перед этим вам нужно отсортировать их, так как ключ только для чтения, вы должны создать новую коллекцию
// Acquire keys and sort them.
var list = ObservableCollection.Keys.ToList();
list.Sort();
int i = 0;
var newList = new ObservableCollection<KeyValuePair<int, string>>();
foreach (var key in list)
{
newList.Add(new KeyValuePair<int, string>(i, ObservableCollection[key].Value));
i++;
}
Однако вы можете перенести элементы с номера, на котором был удален элемент
KeyValuePair<K,V>.Key
только для чтения. Таким образом, вы должны создать новый KeyValuePair<int, string>
чтобы это работало.