Beispiel #1
0
        public void UpdateProfileElements()
        {
            // Order the children
            var vmsList = Children.OrderBy(v => v.ProfileElement.Order).ToList();

            for (var index = 0; index < vmsList.Count; index++)
            {
                var profileElementViewModel = vmsList[index];
                Children.Move(Children.IndexOf(profileElementViewModel), index);
            }

            // Ensure every child element has an up-to-date VM
            if (ProfileElement.Children != null)
            {
                foreach (var profileElement in ProfileElement.Children.OrderBy(c => c.Order))
                {
                    TreeItemViewModel existing = null;
                    if (profileElement is Folder folder)
                    {
                        existing = Children.FirstOrDefault(p => p is FolderViewModel vm && vm.ProfileElement == folder);
                        if (existing == null)
                        {
                            Children.Add(_folderViewModelFactory.Create((FolderViewModel)this, folder));
                        }
                    }
                    else if (profileElement is Layer layer)
                    {
                        existing = Children.FirstOrDefault(p => p is LayerViewModel vm && vm.ProfileElement == layer);
                        if (existing == null)
                        {
                            Children.Add(_layerViewModelFactory.Create((FolderViewModel)this, layer));
                        }
                    }

                    existing?.UpdateProfileElements();
                }
            }
        }