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()); } }
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); }