0

我需要将ArcGIS Runtime SDK for .NETMap中的ArcGIS 绑定到视图模型,该视图模型提供了一组自定义模型,这些模型代表各个 ArcGIS的数据(用于序列化目的)。现在,由于 ArcGIS 对 MVVM 并不真正友好(大多数“控件”只是s,没有数据上下文或不支持模板),我最初的想法是将其包装在一个自定义控件中,该控件派生自我绑定到我的自定义类型然后选择适合包含正在渲染到地图中的 ArcGIS 的类型。像这样的东西:LayerDependencyObjectMapViewItemsControlDataTemplateLayer

<local:MapViewAdapter ItemsSource="{Binding MyCustomTypes}">
    <local:MapViewAdapter.Resources>
        <DataTemplate DataType="{x:Type ArcGISDrawLayer}">
            <GraphicsLayer GraphicsSource="{Binding LayerGraphics}" />
        </DataTemplate>
        ...
    </local:MapViewAdapter.Resources> 
</local:MapViewAdapter>

应该在MapViewAdapter内部创建一个新MapViewMap,然后将指定DataTemplate的 s渲染LayerCollectionMap.

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

4

1 回答 1

0

现在,由于 ArcGIS 对 MVVM 并不友好(大多数“控件”只是 DependencyObjects,没有数据上下文或不支持模板)

只有 UI 控件具有数据上下文,自然非 UI 对象(如图层)没有模板,因为这仅适用于 UI 对象。这就是 XAML 的工作原理。相反,您应该在Map建模数据时考虑绑定到您的数据MapView,而不是地图内的各个图层。

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

<esri:MapView Map="{Binding Map}" />
于 2017-02-28T07:26:17.507 回答