public DataViewerViewModel(GisEditorWpfMap map, IEnumerable <FeatureLayer> availableLayers, FeatureLayer selectedLayer, bool showSelectedFeatures, bool allowEdit, IDictionary <FeatureLayer, Collection <string> > linkColumnNames) { enableColumnVirtualization = true; this.map = map; CurrentDataTable = new DataTable(); queryConditions = new Collection <QueryConditionViewModel>(); editDataChanges = new ObservableCollection <EditDataChange>(); HightLightRowColor = DataViewerHelper.GetHightlightLayerColor(); this.showSelectedFeatures = showSelectedFeatures; changedLayers = new Collection <FeatureLayer>(); AllowEdit = allowEdit; if (availableLayers != null && availableLayers.Count() > 0) { allLayerAdapters = new ObservableCollection <FeatureLayerAdapter>(); foreach (var item in availableLayers) { Collection <string> tempUriColumnNames = new Collection <string>(); if (linkColumnNames.ContainsKey(item)) { tempUriColumnNames = linkColumnNames[item]; } FeatureLayerPlugin featureLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(item.GetType()).OfType <FeatureLayerPlugin>().FirstOrDefault(); if (featureLayerPlugin != null) { bool isEfficient = featureLayerPlugin.CanPageFeaturesEfficiently; if (isEfficient) { PagedFeatureLayerAdapter shapeFileFeatureLayerDataAdapter = new PagedFeatureLayerAdapter(item, tempUriColumnNames); shapeFileFeatureLayerDataAdapter.IsLinkDataSourceEnabled = !allowEdit; shapeFileFeatureLayerDataAdapter.LoadingData += new EventHandler <ProgressChangedEventArgs>(shapeFileFeatureLayerDataAdapter_LoadingData); allLayerAdapters.Add(shapeFileFeatureLayerDataAdapter); } else { FeatureLayerAdapter featureLayerAdapter = new FeatureLayerAdapter(item, tempUriColumnNames); allLayerAdapters.Add(featureLayerAdapter); } } } if (selectedLayer != null && availableLayers.Contains(selectedLayer)) { SelectedLayerAdapter = allLayerAdapters.Where(adapter => adapter.FeatureLayer == selectedLayer).FirstOrDefault(); } else if (availableLayers.Contains(map.ActiveLayer)) { SelectedLayerAdapter = allLayerAdapters.Where(adapter => adapter.FeatureLayer == map.ActiveLayer).FirstOrDefault(); } else { SelectedLayerAdapter = allLayerAdapters.FirstOrDefault(); } } }
private void HighlightOrUnhighlightRecord(DataRow currentDataRow) { bool isSelected = !Convert.ToBoolean(currentDataRow[FeatureLayerAdapter.IsSelectedColumnName]); currentDataRow[FeatureLayerAdapter.IsSelectedColumnName] = isSelected; var featureId = currentDataRow[FeatureLayerAdapter.FeatureIdColumnName].ToString(); Feature selectedFeature = null; if (!viewModel.SelectedLayer.FeatureIdsToExclude.Contains(featureId)) { viewModel.OpenFeatureLayer(); var columns = viewModel.SelectedLayer.FeatureSource.GetColumns(GettingColumnsType.FeatureSourceOnly); selectedFeature = viewModel.SelectedLayer.FeatureSource.GetFeatureById(featureId, columns.Select(c => c.ColumnName).ToArray()); viewModel.CloseFeatureLayer(); } else { var editorOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (editorOverlay != null) { if (editorOverlay.EditShapesLayer.InternalFeatures.Contains(featureId)) { selectedFeature = editorOverlay.EditShapesLayer.InternalFeatures[featureId]; } } } if (selectedFeature != null && selectedFeature.GetWellKnownBinary() != null) { Feature copyFeature = GisEditor.SelectionManager.GetSelectionOverlay().CreateHighlightFeature(selectedFeature, viewModel.SelectedLayer); copyFeature.Tag = viewModel.SelectedLayer; if (isSelected) { if (IsHighlightFeatureEnabled) { DataViewerHelper.HightlightSelectedFeature(copyFeature); } viewModel.SelectedLayerAdapter.SelectedFeatures.Add(selectedFeature.Id, selectedFeature); } else { DataViewerHelper.RemoveHightlightFeature(copyFeature); viewModel.SelectedLayerAdapter.SelectedFeatures.Remove(selectedFeature.Id); } viewModel.SelectedCount = viewModel.SelectedLayerAdapter.SelectedFeatures.Count; } }