Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ArcGIS for WPF自定义符号进行数据绑定?_Wpf_Mvvm_Arcgis_Esri - Fatal编程技术网

如何使用ArcGIS for WPF自定义符号进行数据绑定?

如何使用ArcGIS for WPF自定义符号进行数据绑定?,wpf,mvvm,arcgis,esri,Wpf,Mvvm,Arcgis,Esri,Esri的ArcGIS for WPF似乎没有任何真正的MVVM支持或绑定支持;除非我弄错了 无论如何,我正在创建一个跟踪应用程序,它需要通过GPS坐标跟踪对象 我已经实现了一个自定义的IGeoPositionWatcher,它与GpsLayer一起使用。这一切都很完美。我可以修改GPS坐标,我在地图上的小点会平稳地移动到它最后的休息点。我的问题是我不能使用GpsLayer附带的小点和箭头。我需要一个自定义的标记符号类似于以下内容: <Grid> <Image Sourc

Esri的ArcGIS for WPF似乎没有任何真正的MVVM支持或绑定支持;除非我弄错了

无论如何,我正在创建一个跟踪应用程序,它需要通过GPS坐标跟踪对象

我已经实现了一个自定义的
IGeoPositionWatcher
,它与
GpsLayer
一起使用。这一切都很完美。我可以修改GPS坐标,我在地图上的小点会平稳地移动到它最后的休息点。我的问题是我不能使用
GpsLayer
附带的小点和箭头。我需要一个自定义的
标记符号
类似于以下内容:

<Grid>
   <Image Source="{Binding Pogostick.HeightImage}" />
   <TextBlock Text="{Binding Pogostick.PogoId}" />
</Grid>

我有一个“pogostick”列表(数量未知,在任何给定时刻都会发生变化),这些“pogostick”总是由GPS跟踪,需要根据其状态更新符号。问题是,我无法使
Pogostick
对象成为自定义
MarkerSymbol.ControlTemplate
DataContext
,并且我的图像源和文本的

我试图避免在
graphicallayer
中使用
Graphic
,并希望它能与
GpsLayer
一起使用。有没有办法做到这一点?我做得对吗。。。我应该使用
图形层
还是
功能层


我想在用户的桌面应用程序上呈现这些跟踪的pogostick,而不是通过编辑地图服务上的图层或功能。也许我应该使用自定义渲染器?

我已经找到了一种方法。我创建了一个类,该类继承自
MarkerSymbol
,该类具有
dependencProperty
,其中包含我要绑定到的对象(Pogostick类)

然后我在资源字典中创建一个
ControlTemplate
,如下所示:

<ControlTemplate x:Key="PogostickMarker">
    <StackPanel>
        <Image Source="{Binding Symbol.Entity.HeightImage}" />
        <TextBlock Text="{Binding Symbol.Entity.PogostickId}" />
    </StackPanel>
</ControlTemplate>
注意:当映射的
useCarleratedDisplay
属性设置为
True
时,不能使用此方法。如果有人知道如何在属性设置为true的情况下使用此方法,请告诉我

<ControlTemplate x:Key="PogostickMarker">
    <StackPanel>
        <Image Source="{Binding Symbol.Entity.HeightImage}" />
        <TextBlock Text="{Binding Symbol.Entity.PogostickId}" />
    </StackPanel>
</ControlTemplate>
GpsLayer layer = new GpsLayer();
EntityMarkerSymbol marker = new EntityMarkerSymbol() { Entity = pogoStick };

marker.ControlTemplate = Application.Current.Resources["ConvoyMarker"] as ControlTemplate;
layer.LocationMarkerSymbol = marker;