private void RemoveViewModelFromCollections(IIdentifier identifier) { if (!modelDictionary.ContainsKey(identifier.Id)) { return; } IIdentityTreeItemViewModel <T> vm = viewModelDictionary[identifier.Id]; vm.Expanded -= OnViewModelExpanded; vm.Selected -= OnViewModelSelected; vm.Target.ParentChanged -= OnTreeItemParentChanged; if (SelectedTreeItem == vm) { SelectedTreeItem = null; } modelDictionary.Remove(vm.Identifier.Id); viewModelDictionary.Remove(vm.Identifier.Id); allNodes.Remove(vm); if (vm.Parent != null) { IIdentityTreeItemViewModel <T> parentVM = viewModelDictionary[vm.Parent.Identifier.Id]; parentVM.RemoveChild(identifier); } foreach (var item in vm.Target.Children) { RemoveViewModelFromCollections(item.Identifier); } }
private void OnTreeItemParentChanged(object sender, IdentityTreeItemParentChangedEventArgs <T> e) { IIdentityTreeItem <T> treeItem = sender as IIdentityTreeItem <T>; IIdentityTreeItemViewModel <T> vm = viewModelDictionary[treeItem.Identifier.Id]; if (e.OldParent != null) { IIdentityTreeItemViewModel <T> oldParentVM = viewModelDictionary[e.OldParent.Identifier.Id]; oldParentVM.RemoveChild(vm.Identifier); } if (e.NewParent != null) { IIdentityTreeItemViewModel <T> newParentVM = viewModelDictionary[e.NewParent.Identifier.Id]; newParentVM.AddChild(vm); } }