我正在使用键/值绑定ObservableCollection - > int(index)和字符串到ItemsControl中的文本框。
<TextBox Text="{Binding Path=Value , Mode=OneWay}" />
如果单击ItemsControl中的按钮,则可以删除Collection中的项目。
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),例如:
我该怎么做?
答案 0 :(得分:3)
删除项目后投射新的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
重载。假定从零开始编号。答案 1 :(得分:0)
你可以用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++;
}
但是,您可以从项目删除的数字中移动项目