/// <summary> /// Add a validation item context to a proper group /// </summary> /// <param name="itemContext"></param> private ValidationGroupContext AddToGroup(ValidationItemContextBase itemContext) { IValidationItem item = itemContext.ValidationItem; string groupName = null; //if (this.DisplayConfig.IsByDeviceType) groupName = item.DeviceType; //else // groupName = item.Category; ValidationGroupContext group; if (!groupNameToContext.TryGetValue(groupName, out group)) { group = new ValidationGroupContext(groupName); groupNameToContext.Add(groupName, group); group.IsExpandedChanged += new EventHandler(group_IsExpandedChanged); this.ValidationGroups.Add(group); } if (group.ValidationResultItems.Contains(itemContext) == false) { group.ValidationResultItems.Add(itemContext); } if (this.validationItem2ItemGroupViewModel.ContainsKey(item) == false) { this.validationItem2ItemGroupViewModel.Add(item, group); } return(group); }
private void RemoveGroup(ValidationGroupContext groupCxt) { this.ValidationGroups.Remove(groupCxt); this.groupNameToContext.Remove(groupCxt.SortingName); groupCxt.IsExpandedChanged -= new EventHandler(group_IsExpandedChanged); this.BindingList.Remove(groupCxt); }
//private void ReportButton_Click(object sender, System.Windows.RoutedEventArgs e) //{ // DesignValidationContext cxt = this.DataContext as DesignValidationContext; // if (cxt == null) // { // Debug.Assert(false); // return; // } // AudDocument audDoc = AudApplication.DocumentManager.Active; // ValidationItemReport report = new ValidationItemReport(audDoc); // foreach (ValidationGroupContext grp in cxt.ValidationGroups) // report.AddValidationItems( // from ValidationItemContextBase vicb in grp.ValidationResultItems // select vicb.ValidationItem, true); // report.Report(Properties.Resources.DesignValidation); //} //private void ResolveButton_Click(object sender, System.Windows.RoutedEventArgs e) //{ // DesignValidationContext cxt = this.DataContext as DesignValidationContext; // if (cxt != null) // cxt.ResolveAll(); //} private void validationGroupsControl_CleanUpVirtualizedItem(object sender, CleanUpVirtualizedItemEventArgs e) { if (e == null) { return; } ValidationGroupContext group = e.Value as ValidationGroupContext; if (group == null) { return; } group.DisconnectByVirtualizationCleanup(); }
/// <summary> /// User clicked to collapse or expand a group; /// To improve performance by XXX times we simply bind a list to Validation Result listbox, /// so here we manually remove/add validation items from/to the group /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void group_IsExpandedChanged(object sender, EventArgs e) { ValidationGroupContext group = sender as ValidationGroupContext; if (group == null) { return; } if (group.IsExpanded) { int index = this.BindingList.IndexOf(group) + 1; if (index < 1) { Debug.Assert(false); return; } foreach (var item in group.ValidationResultItems) { if (item.IsVisible) { this.BindingList.Insert(index++, item); } } } else { foreach (var item in group.ValidationResultItems) { if (item.IsVisible)//otherwise it's not in binding list { this.BindingList.Remove(item); } } } }
/// <summary> /// Validation item set changed /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void validationItems_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { Dictionary <string, ValidationGroupContext> affectedGroups = new Dictionary <string, ValidationGroupContext>(); if (e.NewItems != null) { foreach (var obj in e.NewItems) { IValidationItem item = obj as IValidationItem; if (item == null) { continue; } ValidationGroupContext group = this.CreateValidationItemContext(item); ValidationItemContextBase itemCxt = this.validationItem2ItemViewModel[item]; Debug.Assert(itemCxt != null); int indexToInsert = -1; if (!this.BindingList.Contains(group)) { this.BindingList.Add(group); if (group.IsExpanded) { indexToInsert = this.BindingList.IndexOf(group) + 1; } } else { if (group.IsExpanded && itemCxt.IsVisible) { //note that when calling group.GetVisibleChildrenCount, itemCxt is already counted indexToInsert = this.BindingList.IndexOf(group) + group.GetVisibleChildrenCount(); } } if ((indexToInsert >= 0) && itemCxt.IsVisible) { this.BindingList.Insert(indexToInsert, itemCxt); } if (affectedGroups.ContainsKey(group.SortingName) == false) { affectedGroups.Add(group.SortingName, group); } } } bool toClearClickedItem = false; if (e.OldItems != null) { foreach (var obj in e.OldItems) { IValidationItem item = obj as IValidationItem; if (item == null) { continue; } //if ((this.clickedItem != null) && // Object.ReferenceEquals(this.clickedItem.ValidationItem, item)) //{ // toClearClickedItem = true; //} ValidationGroupContext group = this.validationItem2ItemGroupViewModel[item]; if (group == null) { continue; } ValidationItemContextBase itemCxt = this.validationItem2ItemViewModel[item]; if (itemCxt == null) { continue; } group.ValidationResultItems.Remove(itemCxt); this.validationItem2ItemViewModel.Remove(item); this.validationItem2ItemGroupViewModel.Remove(item); if (this.BindingList.Contains(itemCxt)) { this.BindingList.Remove(itemCxt); } if (affectedGroups.ContainsKey(group.SortingName) == false) { affectedGroups.Add(group.SortingName, group); } } } foreach (var group in affectedGroups) { if (group.Value.ValidationResultItems.Count == 0) { ValidationGroupContext groupCxt = group.Value; this.RemoveGroup(groupCxt); } else { group.Value.UpdateHeader(); } } ValidationManager validationManager = this.ValidationManager; if (validationManager == null) { return; } //this.UpdateDisplayConfigSettings(validationManager.ValidationItemCount); //if (toClearClickedItem && (this.clickedItem != null)) // this.OnItemClicked(null); base.OnPropertyChanged("HasResolveItems"); }