Пример #1
0
        public FeatureLayerHelper(Map map, string name, FeatureLayer.QueryMode mode, bool visible)
        {
            this.FeatureLayer = (FeatureLayer)map.Layers.FirstOrDefault(layer => (layer is FeatureLayer) && ((FeatureLayer)layer).DisplayName.ToLower().Equals(name.ToLower()));
            if (this.FeatureLayer == null)
            {
                Log.Trace("Could not find layer with name '" + name + "'");
                return;
            }

            this.FeatureLayer.Visible  = visible;
            this.FeatureLayer.Mode     = mode;
            this.FeatureLayer.AutoSave = false;

            this.Fields = QueryLayerFields(this.FeatureLayer);
            if (this.Fields == null)
            {
                Log.Trace("Could not query layer fields '" + name + "'");
            }

            this.FeatureLayer.Initialized += FeatureLayer_Initialized;
            this.FeatureLayer.Initialize();

            this.FeatureLayer.BeginSaveEdits  += FeatureLayer_BeginSaveEdits;
            this.FeatureLayer.EndSaveEdits    += FeatureLayer_EndSaveEdits;
            this.FeatureLayer.UpdateCompleted += FeatureLayer_UpdateCompleted;
            this.FeatureLayer.UpdateFailed    += FeatureLayer_UpdateFailed;
            this.FeatureLayer.SaveEditsFailed += FeatureLayer_SaveEditsFailed;
        }
        /// <summary>
        /// Converts bool to QueryMode.
        /// </summary>
        /// <returns>True=OnDemand, False=SnapShot</returns>
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            FeatureLayer.QueryMode mode = FeatureLayer.QueryMode.Snapshot;
            var checkedVal = (bool)value;
            var param      = parameter as string;

            if (param == "OnDemand")
            {
                mode = checkedVal ? FeatureLayer.QueryMode.OnDemand : FeatureLayer.QueryMode.Snapshot;
            }
            return(mode);
        }
Пример #3
0
        //Workaround for issue in core api. Once geometry is being removed from the query string once the mode changes, we can remove this code
        void OnModeChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            FeatureLayer layer = Layer as FeatureLayer;

            if (layer != null)
            {
                FeatureLayer.QueryMode oldMode = (FeatureLayer.QueryMode)e.OldValue;
                FeatureLayer.QueryMode newMode = (FeatureLayer.QueryMode)e.NewValue;

                if (oldMode != newMode)
                {
                    if (oldMode == FeatureLayer.QueryMode.OnDemand && newMode == FeatureLayer.QueryMode.Snapshot)
                    {
                        layer.Geometry = null;
                    }

                    if (newMode == FeatureLayer.QueryMode.Snapshot ||
                        newMode == FeatureLayer.QueryMode.OnDemand)
                    {
                        // We only need to make sure the client caching is off while we
                        // do this update, and then return it to the original state.
                        bool cachingDisabled = layer.DisableClientCaching;
                        if (!cachingDisabled)
                        {
                            layer.DisableClientCaching = true;
                        }

                        layer.Update();

                        if (!cachingDisabled)
                        {
                            layer.DisableClientCaching = false;
                        }
                    }
                }
            }
        }