Skip to main content
 首页 » 编程设计

c#之如何重新编号 ObservableCollectionKeyValuePairint, string>

2024年08月12日27lvdongjie

我将 ObservableCollection 与键/值 -> int(索引)和字符串绑定(bind)到 ItemsControl 中的文本框。

<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) 例如:

  • 删除项目前的集合:0 - “aaa”,1 - “bbb”,2 - “ccc”,3 - “ddd”
  • 删除项目后的集合:0 - “aaa”,2 - “ccc”,3 - “ddd”
  • 重新编号后的集合:0 - "aaa",1 - "ccc",2 - "ddd"

我该怎么做?

请您参考如下方法:

在删除项目后转换一个新的 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))); 

注释

  • OrderBy 保留顺序
  • 使用提供项目索引的Select 重载。假定从零开始编号。