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)); }
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(); }); } //}); }