示例#1
0
        public void Execute(TreeNodeViewModel root, IList <TItem> items)
        {
            if (root == null)
            {
                throw new ArgumentNullException(nameof(root));
            }
            if (items == null)
            {
                throw new ArgumentNullException(nameof(items));
            }
            if (items.Count == 0)
            {
                return;
            }

            var groups = Group(root, items);

            if (Comparer != null)
            {
                groups = groups.OrderBy(cond => cond.Key, Comparer <TGroupKey> .Create(Comparer));
            }

            foreach (var group in groups)
            {
                var node = new TreeNodeViewModel {
                    NodeText = TextSelector(group.Key), NodeObj = group.Key
                };
                node.SubItems.AddRange(group.OfType <object>());
                root.AddNode(node);
            }
        }
示例#2
0
        public TreeNodeViewModel Execute(IList <TItem> items)
        {
            var root = new TreeNodeViewModel();

            if (items == null || items.Count == 0)
            {
                return(root);
            }

            GroupBy(root, items, 0);
            return(root);
        }
示例#3
0
        private void GroupBy(TreeNodeViewModel parentNode, IList <TItem> groupItems, int groupIndex)
        {
            if (groupIndex >= _groupBys.Count)
            {
                _itemBy.Execute(parentNode, parentNode.SubItems.OfType <TItem>().ToList());
                return;
            }

            var groupExecutor = _groupBys[groupIndex];

            groupExecutor.Execute(parentNode, groupItems);

            foreach (var node in parentNode.Nodes)
            {
                GroupBy(node, node.SubItems.OfType <TItem>().ToList(), groupIndex + 1);
            }
        }
        public TreeViewViewModel Execute(IList <TItem> items)
        {
            var result = new TreeViewViewModel();

            if (items == null || items.Count == 0)
            {
                return(result);
            }

            var root = new TreeNodeViewModel();

            GroupBy(root, items, 0);
            foreach (var node in root.Nodes.ToList())
            {
                result.AddNode(node);
                root.RemoveNode(node);
            }
            return(result);
        }
示例#5
0
 protected abstract IEnumerable <IGrouping <TGroupKey, TItem> > Group(TreeNodeViewModel root,
                                                                      IList <TItem> items);
示例#6
0
 protected override IEnumerable <IGrouping <TGroupKey, TItem> > Group(TreeNodeViewModel root,
                                                                      IList <TItem> items)
 {
     return(items.GroupBy(item => KeySelector(item, (TParentGroupKey)root.NodeObj)));
 }