I have a WPF Treeview
control with an ObservableCollection<TreeItemModel>
binded to its ItemsSource
This treeview can have the following structure to the n'th Level:
1
|-1.1
|-1.1.1
|-1.1.2
|-1.2
2
|-2.1
|-2.2
When an Item is re-arranged in this ObservableCollection, eg 2.2 is moved under 1.1 to become 1.1.3.
How do i loop through this collection and update all of the numbers attached to each node?
Assuming you have a view model with a recursive tree item structure, you may add a method that recursively updates all numbers:
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();
}
}
}
Whenever you call the UpdateTreeItemNumbers()
method of the view model, all numbers will be regenerated.
For completeness, the TreeView XAML would look like this:
<TreeView ItemsSource="{Binding TreeItems}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Number}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.