我需要将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控件的情况下完成此操作。有什么想法吗?
答案 0 :(得分:0)
现在,由于ArcGIS不是真正的MVVM(大多数&#39; Controls&#39;只是 DependencyObjects,没有数据上下文或不支持模板化)
只有UI控件具有datacontext,而像图层这样的非UI对象自然没有模板,因为它只适用于UI对象。这就是XAML的工作原理。相反,当您为绑定到Map
的数据建模时,应该考虑MapView
,而不是地图中的各个图层。
您可以创建一个IValueConverter,将您的图形图层转换为一个地图,然后将其绑定到您的地图,或者甚至更好,简单地在您的模型中使用地图。
<esri:MapView Map="{Binding Map}" />