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