Esempio n. 1
0
        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;
            }
        }