将ArcGIS Map包装到ItemsControl(ItemsControlProxy)

时间:2016-10-26 12:08:21

标签: c# wpf mvvm arcgis arcgis-runtime

我需要将ArcGIS Map ArcGIS Runtime SDK for .NET 绑定到视图模型,该视图模型提供了一组自定义模型,这些模型表示各个ArcGIS {{ 1}} s(用于序列化目的)。既然ArcGIS不是真正的MVVM友好(大多数' Controls'只是Layer,没有数据上下文或者不支持模板),我最初的想法是包装{{ 1}}在自定义控件中派生自DependencyObject我绑定到自定义类型,然后为包含ArcGIS {{1}的类型选择适当的MapView正在渲染到地图中。像这样:

ItemsControl

DataTemplate应在内部创建一个新的Layer及其<local:MapViewAdapter ItemsSource="{Binding MyCustomTypes}"> <local:MapViewAdapter.Resources> <DataTemplate DataType="{x:Type ArcGISDrawLayer}"> <GraphicsLayer GraphicsSource="{Binding LayerGraphics}" /> </DataTemplate> ... </local:MapViewAdapter.Resources> </local:MapViewAdapter> ,然后将指定的MapViewAdapter呈现为MapView Map

但是我不知道如何在不重新实现大多数ArcGIS控件的情况下完成此操作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

现在,由于ArcGIS不是真正的MVVM(大多数&#39; Controls&#39;只是   DependencyObjects,没有数据上下文或不支持模板化)

只有UI控件具有datacontext,而像图层这样的非UI对象自然没有模板,因为它只适用于UI对象。这就是XAML的工作原理。相反,当您为绑定到Map的数据建模时,应该考虑MapView,而不是地图中的各个图层。

您可以创建一个IValueConverter,将您的图形图层转换为一个地图,然后将其绑定到您的地图,或者甚至更好,简单地在您的模型中使用地图。

<esri:MapView Map="{Binding Map}" />