我需要将ArcGIS Map从ArcGIS运行时SDKfor.NET绑定到视图模型,该模型提供了一组自定义模型,这些模型表示单个ArcGIS Layer的数据(用于序列化目的)。现在,由于ArcGIS并不是真正的MVVM友好的(大多数‘控件’只是DependencyObject的,没有数据上下文或不支持模板),我的最初想法是将MapView包装在一个自定义控件中,该控件派生自我绑定到自定义类型的ItemsControl,然后为包含正在呈现到映射中的ArcGIS Layer的类型选择适当的DataTemplate。就像这样:
<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,然后将指定的DataTemplate呈现到Map的LayerCollection中。
但是,我不知道如何在不重新实现大多数ArcGIS控件的情况下完成这一任务。有什么想法吗?
发布于 2017-02-28 07:26:17
现在,由于ArcGIS并不是真正的MVVM友好(大多数‘控件’只是DependencyObjects,没有数据上下文或不支持模板)
只有UI控件有数据文本,而像图层这样的非UI对象自然没有模板,因为这只适用于UI对象。这就是XAML的工作原理。相反,在对绑定到Map的数据建模时,您应该考虑您的MapView,而不是映射中的各个层。
您可以创建一个IValueConverter,将图形层转换为一个映射,然后绑定到您的地图上,或者更好的是,您的模型中有简单的地图。
<esri:MapView Map="{Binding Map}" />https://stackoverflow.com/questions/40261875
复制相似问题