[英]What is the best way to Iterate through a Treeview Collection to update a Numbering Scheme?
我有一个WPF Treeview
控件,其ObservableCollection<TreeItemModel>
绑定到了它的ItemsSource
该树视图在第n层可以具有以下结构:
1
|-1.1
|-1.1.1
|-1.1.2
|-1.2
2
|-2.1
|-2.2
当在此ObservableCollection中重新安排Item时,例如,将2.2移至1.1以下,成为1.1.3。
如何遍历此集合并更新附加到每个节点的所有数字?
假设您具有带有递归树项结构的视图模型,则可以添加一个递归更新所有数字的方法:
public class TreeItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<TreeItem> Children { get; }
= new ObservableCollection<TreeItem>();
private string number;
public string Number
{
get { return number; }
set
{
if (number != value)
{
number = value;
PropertyChanged?.Invoke(
this, new PropertyChangedEventArgs(nameof(Number)));
}
for (int i = 0; i < Children.Count; i++)
{
Children[i].Number = string.Format("{0}.{1}", number, i + 1);
}
}
}
}
public class ViewModel
{
public ObservableCollection<TreeItem> TreeItems { get; }
= new ObservableCollection<TreeItem>();
public void UpdateTreeItemNumbers()
{
for (int i = 0; i < TreeItems.Count; i++)
{
TreeItems[i].Number = (i + 1).ToString();
}
}
}
每当您调用视图模型的UpdateTreeItemNumbers()
方法时,都会重新生成所有数字。
为了完整起见,TreeView XAML如下所示:
<TreeView ItemsSource="{Binding TreeItems}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Number}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.