public IdentityTreeViewModel(IIdentityTreeManager <T> identityTreeManager) { treeManager = identityTreeManager ?? throw new ArgumentNullException(nameof(identityTreeManager) + " can not be null"); modelDictionary = new Dictionary <string, T>(); viewModelDictionary = new Dictionary <string, IIdentityTreeItemViewModel <T> >(); allNodes = new ObservableCollection <IIdentityTreeItemViewModel <T> >(); AllNodes = new ListCollectionView(allNodes) { CustomSort = new TreeItemNameComparer <T>() }; RootNodes = new ListCollectionView(allNodes) { Filter = new Predicate <object>(RootNodeFilter), IsLiveFiltering = true, CustomSort = new TreeItemNameComparer <T>() }; RootNodes.LiveFilteringProperties.Add(nameof(IIdentityTreeItemViewModel <T> .Parent)); CheckedNodes = new ListCollectionView(allNodes) { Filter = new Predicate <object>(CheckedNodeFilter), IsLiveFiltering = true }; CheckedNodes.LiveFilteringProperties.Add(nameof(IIdentityTreeItemViewModel <T> .IsChecked)); ExpandedNodes = new ListCollectionView(allNodes) { Filter = new Predicate <object>(ExpandedNodeFilter), IsLiveFiltering = true }; ExpandedNodes.LiveFilteringProperties.Add(nameof(IIdentityTreeItemViewModel <T> .IsExpanded)); SelectedNodes = new ListCollectionView(allNodes) { Filter = new Predicate <object>(SelectedNodeFilter), IsLiveFiltering = true }; SelectedNodes.LiveFilteringProperties.Add(nameof(IIdentityTreeItemViewModel <T> .IsSelected)); CreateRootViewModels(); treeManager.AllItems.CollectionChangeAdded += OnAllItemsCollectionChangeAdded; treeManager.AllItems.CollectionChangeRemoved += OnAllItemsCollectionChangeRemoved; }
public override void Close() { foreach (IIdentityTreeItemViewModel <T> vm in viewModelDictionary.Values) { vm.Close(); } RootNodes = null; CheckedNodes = null; ExpandedNodes = null; SelectedNodes = null; modelDictionary.Clear(); modelDictionary = null; viewModelDictionary.Clear(); viewModelDictionary = null; allNodes.Clear(); allNodes = null; treeManager.AllItems.CollectionChangeAdded -= OnAllItemsCollectionChangeAdded; treeManager.AllItems.CollectionChangeRemoved -= OnAllItemsCollectionChangeRemoved; treeManager = null; base.Close(); }