繁体   English   中英

遍历Treeview集合以更新编号方案的最佳方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM