2016-10-26 1 views
0

je dois lier un ArcGIS Map de la ArcGIS Runtime SDK pour .NET à un modèle de vue qui offre une collection de modèles personnalisés qui représentent les données des différents ArcGIS Layer s (utilisé à des fins de sérialisation). Maintenant, puisque ArcGIS n'est pas vraiment MVVM convivial (« contrôle » la plupart ne sont que DependencyObject s, ont pas de contexte de données ou ne prennent pas en charge templating), mon idée initiale est d'envelopper le MapView dans un contrôle personnalisé qui dérive de ItemsControl que je lier à mes types personnalisés, puis sélectionner le DataTemplate approprié pour le type qui contient un ArcGIS Layer en cours de rendu dans la carte. Quelque chose comme ceci:Emballage ArcGIS Carte en ItemsControl (ItemsControlProxy)

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

Le MapViewAdapter devrait créer en interne une nouvelle MapView avec elle est Map puis rendre les spécifiées DataTemplate s dans la LayerCollection du Map.

Cependant, je n'ai aucune idée de la façon de procéder sans ré-implémenter la plupart des contrôles ArcGIS. Des idées?

Répondre

0

maintenant depuis ArcGIS est pas vraiment MVVM convivial (« contrôle » la plupart ne sont que DependencyObjects, ont pas de contexte de données ou ne prennent pas en charge templating)

Seuls les contrôles de l'interface utilisateur ont datacontext, et naturellement non -UI objets comme les couches n'a pas de modèles, car cela ne s'applique qu'aux objets de l'interface utilisateur. C'est comme ça que fonctionne XAML. Au lieu de cela, vous devez penser à votre Map lorsque vous modélisez des données que vous liez à votre MapView, et non aux couches individuelles de la carte.

Vous pouvez créer un IValueConverter qui convertit votre couche graphique en une carte que vous liez ensuite à votre carte, ou mieux encore, vous avez simplement des cartes dans vos modèles.

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