private ComponentViewModel BuildComponentViewModelHierarchy(
            Component rootComponent)
        {
            var rootComponentVM = new ComponentViewModel(EventAggregator, MessageService, rootComponent);

            Queue <Component> componentsQueue = new Queue <Component>();

            componentsQueue.Enqueue(rootComponent);

            Queue <ComponentViewModel> componentsVMQueue = new Queue <ComponentViewModel>();

            componentsVMQueue.Enqueue(rootComponentVM);

            //użyte przemierzanie drzewa wszerz żeby zbudować odpowiadające drzewo View Modeli.
            while (componentsQueue.Count > 0)
            {
                var currentComponent   = componentsQueue.Dequeue();
                var currentComponentVM = componentsVMQueue.Dequeue();
                foreach (var child in currentComponent.Children)
                {
                    componentsQueue.Enqueue(child);

                    var newComponentVM = new ComponentViewModel(EventAggregator, MessageService, child);
                    componentsVMQueue.Enqueue(newComponentVM);
                    currentComponentVM.Children.Add(newComponentVM);
                }
            }

            return(rootComponentVM);
        }
 private void UpdateParentChildRelation(
     ComponentViewModel oldParent,
     ComponentViewModel newParent)
 {
     if (newParent == null && oldParent.children.Contains(this))
     {
         oldParent.children.Remove(this);
     }
     else if (!parent.children.Contains(this))
     {
         parent.children.Add(this);
     }
 }