I am trying to setup a ESRI Local Server for displaying .mpk
. I have a Model like
public class Model
{
private string basemapLayerUri = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer";
private string mapPackage = "D:\\App\\Data\\Canada.mpk";
public Model() { }
public string BasemapLayerUri
{
get {return this.basemapLayerUri; }
set
{
if (value != this.basemapLayerUri)
{
this.basemapLayerUri = value;
}
}
}
public string MapPackage
{
get { return this.mapPackage; }
set
{
if (value != this.mapPackage)
{
this.mapPackage = value;
}
}
}
}
in ViewModel.cs
Class I have
public class ViewModel : INotifyPropertyChanged { public Model myModel { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public ViewModel()
{
myModel = new Model();
this.CreateLocalServiceAndDynamicLayer();
}
public string BasemapUri
{
get { return myModel.BasemapLayerUri; }
set
{
this.myModel.BasemapLayerUri = value;
OnPropertyChanged("BasemapUri");
}
}
public async void CreateLocalServiceAndDynamicLayer()
{
LocalMapService localMapService = new LocalMapService(this.MAPKMap);
await localMapService.StartAsync();
ArcGISDynamicMapServiceLayer arcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer()
{
ID = "mpklayer",
ServiceUri = localMapService.UrlMapService,
};
//myModel.Map.Layers.Add(arcGISDynamicMapServiceLayer);
}
public string MAPKMap
{
get { return myModel.MapPackage; }
set
{
this.myModel.MapPackage = value;
OnPropertyChanged("MAPKMap");
}
}
protected void OnPropertyChanged([CallerMemberName] string member = "")
{
var eventHandler = PropertyChanged;
if (eventHandler != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(member));
}
}
}
As you can see I am trying to implement the local server and dynamic layer in ViewModel.cs
like
public async void CreateLocalServiceAndDynamicLayer()
{
LocalMapService localMapService = new LocalMapService(this.MAPKMap);
await localMapService.StartAsync();
ArcGISDynamicMapServiceLayer arcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer()
{
ID = "mpklayer",
ServiceUri = localMapService.UrlMapService,
};
myModel.Map.Layers.Add(arcGISDynamicMapServiceLayer);
}
but I do not know how to bind this service to the Mode
? I tried
myModel.Map.Layers.Add(arcGISDynamicMapServiceLayer);
but as you know the myModel
doesn't have any Map object. Can you please let me know how to fix this?
Hi,
Create Property in viewmodel.cs and bind it to map object in XAMl. After that you can pass Map object to your model class. Create Map object in viewmodel constructor.
Sample code:
public Map Map { get; set; } public ViewModel() { Map = new Map(new Basemap(basemapLyrs)); myModel = new Model(Map
); this.CreateLocalServiceAndDynamicLayer(); }
<esri:MapView x:Name="AppMapView" Map="{Binding Map}"
Regards,
Prashant