コード例 #1
0
        private void WorksList_AfterCheck(object sender, TreeViewEventArgs e)
        {
            TreeNode      node  = e.Node;
            bool          check = node.Checked;
            WorkTypeClass work  = null;

            if (node.Tag is WorkTypeClass)
            {
                work = node.Tag as WorkTypeClass;
            }
            if (work != null)
            {
                if (check)
                {
                    if (!CheckedWorks.Exists(w => w.Equals(work)))
                    {
                        CheckedWorks.Add((WorkTypeClass)work.Clone());
                    }
                }
                else
                {
                    CheckedWorks.Remove(CheckedWorks.Find(x => x.FullEquals(work)));
                }
                if (check)
                {
                    if (!CheckedCats.Contains(work.category))
                    {
                        CheckedCats.Add(work.category);
                    }
                }
                else
                {
                    CheckedCats.Remove(work.category);
                }
                CheckedNodesChanged?.Invoke(node, new EventArgs());
            }
        }
コード例 #2
0
        public async Task OnCheckBoxChange()
        {
            var totalCheckDataItemList = new List <TModel>();
            // 查找每个被checked 的父级
            Func <TreeNode <TModel>, List <TModel> > GetAllHalfCheckedParent = null;

            GetAllHalfCheckedParent = node =>
            {
                var result     = new List <TModel>();
                var parentNode = node.ParentNode;
                if (parentNode != null && parentNode.Checked != true)
                {
                    result.Add(parentNode.DataItem);
                    if (parentNode.ParentNode != null)
                    {
                        var d = GetAllHalfCheckedParent(parentNode);
                        result.AddRange(d);
                    }
                }
                return(result);
            };

            var data = tree.CheckedNodes.AsQueryable().Select(node => (TModel)node.DataItem).Distinct().ToList();

            Console.WriteLine(tree.CheckedNodes.Count);
            tree.CheckedNodes.ForEach(item =>
            {
                var parents = GetAllHalfCheckedParent(item);
                data.AddRange(parents);
            }
                                      );
            data = data.Select(item => JsonConvert.DeserializeObject <TModel>(JsonConvert.SerializeObject(item))).ToList();
            data.ForEach(item => item.Children = null);

            await CheckedNodesChanged.InvokeAsync(data);
        }