示例#1
0
        private async Task OnProjectItemRemoving(ProjectItemRemovingEventArgs e)
        {
            await ViewUtils.TryAsync(QueuedTask.Run(() =>
            {
                foreach (var item in e.ProjectItems.OfType <WorklistItem>())
                {
                    string name = WorkListUtils.GetName(item.Path);
                    Assert.NotNullOrEmpty(name);

                    //Item container = Project.Current.GetProjectItemContainer(WorklistsContainer.ContainerTypeName);
                    //var worklistsContainer = container as WorklistsContainer;
                    //worklistsContainer?.Refresh();

                    //foreach (Item cont in Project.Current.ProjectItemContainers)
                    //{
                    //	string contType = cont.Type;
                    //	string contTypeID = cont.TypeID;
                    //}

                    if (_layersByWorklistName.TryGetValue(name, out FeatureLayer worklistLayer))
                    {
                        // this does NOT call the OnLayerRemovingAsync event handler!!o
                        // OnLayerRemovingAsync is called when the layer is removes manually

                        MapView.Active.Map.RemoveLayer(worklistLayer);

                        foreach (IWorkList worklist in GetAssociatedWorklists(
                                     new Layer[] { worklistLayer }))
                        {
                            // no need to persist work list state, work list gets deleted
                            Unload(worklist);

                            Assert.True(_registry.Remove(worklist),
                                        $"Cannot remove work list {worklist.Name} from registry");
                        }
                    }
                }
            }), _msg);

            // NOTE collapses Worklists folder, refresh of folder would be better
            //var projectItem = ProjectItemUtils.Get<MapProjectItem>().ToList();
            //List<Item> items = projectItem?.GetItems()?.ToList();
            //string folderName = "Worklists";
            //Item firstOrDefault = items?.FirstOrDefault(i => string.Equals(folderName, i.Name));
        }
示例#2
0
        private async Task OnLayerRemovingAsync(LayersRemovingEventArgs e)
        {
            // todo daro: revise usage of Task
            //await Task.Run(() =>
            //{
            foreach (IWorkList workList in _layerByWorkList
                     .Where(pair => e.Layers.Contains(pair.Value))
                     .Select(pair => pair.Key).ToList())
            {
                foreach (var observer in _observers)
                {
                    observer.WorkListRemoved(workList);
                }

                List <WorkListObserver> emptyObservers = GetEmptyObservers();

                foreach (var observer in emptyObservers)
                {
                    UnregisterObserver(observer);
                }

                await QueuedTask.Run(() =>
                {
                    // ensure folder exists before commit
                    EnsureFolderExists(GetLocalWorklistsFolder());

                    workList.Commit();

                    UnwireEvents(workList);

                    //UnregisterViewModel(workList);

                    _layerByWorkList.Remove(workList);
                    _registry.Remove(workList);

                    // Note daro: don't dispose work list here. Given the following situation.
                    // Remove work list layer would dispose the source geodatabase (in GdbItemRepository).
                    // Add work list layer again with same source geodatabase is going to throw an
                    // exception, e.g. on SetStatus
                    //workList.Dispose();
                });
            }
            //});
        }