System.Windows.Controls.MultiSelectTreeViewItem.OnItemsChanged C# (CSharp) Méthode

OnItemsChanged() protected méthode

protected OnItemsChanged ( NotifyCollectionChangedEventArgs e ) : void
e System.Collections.Specialized.NotifyCollectionChangedEventArgs
Résultat void
        protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
        {
            MultiSelectTreeView parentTV;

            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Remove:
                    // Remove all items from the SelectedItems list that have been removed from the
                    // Items list
                    parentTV = ParentTreeView;
                    if (parentTV == null)
                        parentTV = lastParentTreeView;
                    if (parentTV != null)
                    {
                        foreach (var item in e.OldItems)
                        {
                            parentTV.SelectedItems.Remove(item);
                            var multiselection = parentTV.Selection as SelectionMultiple;
                            if (multiselection != null)
                            {
                                multiselection.InvalidateLastShiftRoot(item);
                            }
                            // Don't preview and ask, it is already gone so it must be removed from
                            // the SelectedItems list
                        }
                    }
                    break;
                case NotifyCollectionChangedAction.Reset:
                    // Remove all items from the SelectedItems list that are no longer in the Items
                    // list
                    parentTV = ParentTreeView;
                    if (parentTV == null)
                        parentTV = lastParentTreeView;
                    if (parentTV != null)
                    {
                        var selection = new object[parentTV.SelectedItems.Count];
                        parentTV.SelectedItems.CopyTo(selection, 0);
                        HashSet<object> dataItems = new HashSet<object>(parentTV.GetAllDataItems().Cast<object>());
                        foreach (var item in selection)
                        {
                            if (!dataItems.Contains(item))
                            {
                                parentTV.SelectedItems.Remove(item);
                                // Don't preview and ask, it is already gone so it must be removed
                                // from the SelectedItems list
                            }
                        }
                    }
                    break;
            }

            base.OnItemsChanged(e);
        }