2016-07-23 8 views
1

GELÖSTMapControl Template10

ich dieses Problem mit der Tatsache gelöst, dass ich eine MapItemsControl.ItemTemplate hinzuzufügen haben. Ohne dies gibt es nichts mehr als den Namen des Steuerelements.

So fügen Sie einfach diesen Code:

<Maps:MapItemsControl x:Name="mainMapItems" ItemsSource="{Binding MapItems}"> 
<Maps:MapItemsControl.ItemTemplate> 
    <DataTemplate> 
    <StackPanel Background="Transparent"> 
    <TextBlock Maps:MapControl.Location="{Binding Location}" Text="{Binding Title}" Maps:MapControl.NormalizedAnchorPoint="0.5,0.5" FontSize="20" Margin="5"/> 
    </StackPanel> 
    </DataTemplate> 
</Maps:MapItemsControl.ItemTemplate> 
</Maps:MapItemsControl> 

Es ist nicht perfekt, weil dies nicht ein Symbol auf der Karte geben, sondern nur Text. Aber es kann leicht mit dem Hinzufügen von Image = "" in der Sammlung gelöst werden.


Ich versuche, MapControl in einem Template10-Layout zu verwenden.

Der Code ich verwende, ist

MainPage.xaml

  <Maps:MapControl x:Name="MapControl1" 
      ZoomInteractionMode="GestureAndControl" 
      TiltInteractionMode="GestureAndControl" 
      MapServiceToken="<ApiCodeHere>" 
      Loaded="{x:Bind ViewModel.Map_Loaded}"/> 

MainPageViewModel.cs

MapControl _Map; 
    public MapControl Map { get { return _Map; } set { Set(ref _Map, value); RaisePropertyChanged(); } } 

    public async void Map_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e) 
    { 

     MapControl newMap = new MapControl(); 

     Geoposition userLocation = await GetUserLocation(); 

     BasicGeoposition GeoPos_UserLocation = new BasicGeoposition() { Latitude = userLocation.Coordinate.Point.Position.Latitude, Longitude = userLocation.Coordinate.Point.Position.Longitude }; 
     BasicGeoposition GeoPos_NorthWest = new BasicGeoposition() { Latitude = userLocation.Coordinate.Point.Position.Latitude + 0.05, Longitude = userLocation.Coordinate.Point.Position.Latitude + 0.1 }; 
     BasicGeoposition GeoPos_SouthEast = new BasicGeoposition() { Latitude = userLocation.Coordinate.Point.Position.Latitude - 0.05, Longitude = userLocation.Coordinate.Point.Position.Latitude - 0.1 }; 

     GeoboundingBox mapBox = new GeoboundingBox(GeoPos_NorthWest, GeoPos_SouthEast); 

     // Add Point for User 
     MapIcon Icon_UserLocation = new MapIcon() { Location = new Geopoint(GeoPos_UserLocation) }; 
     newMap.MapElements.Add(Icon_UserLocation); 
     newMap.Center = new Geopoint(mapBox.Center); 

     Map = newMap; 

     await Task.CompletedTask; 
    } 

Die Map_Loaded Funktion ausgelöst wird, als exepcted. Die Sache, mit der ich ein Problem habe, ist, dass wenn ich ein normales Projekt wäre, ich die Daten direkt auf MapControl1.Center und MapControl1.MapElements.Add setzen würde. Aber da dies ein MVVM-Projekt ist, ist das nicht so, und ich bin ein wenig verwirrt, wie es weitergehen soll.

Ich möchte etwas wie Views.MainPage.MapControl1.Center = neue Geopoint() machen, aber das funktioniert eindeutig nicht.


zusätzliche Update

Wie sich herausstellt das so einfach war, wie ich dachte. Es ging nur darum, in der richtigen Reihenfolge zu denken.

Das MapControl verfügt über Steuerelemente zum Zoomen und Zentrieren und so weiter. Also, für diese MVVM Code

Center="{Binding MapCenter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
Zoom="{Binding MapZoom,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 

funktioniert habe ich hatte jedoch Probleme mit MapItems Einrichtung wie in dem Dokument, das ich Quellen beschrieben.

Um Elemente auf der Karte erhalten Sie MapItemsControl hinzufügen müssen, und es sollte wie so arbeiten ...

<Maps:MapItemsControl x:Name="mainMapItems" ItemsSource="{Binding MapItems,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></Maps:MapItemsControl> 

Aber mein Code in MainPageViewModel.xaml mit dies nicht funktioniert. Die Elemente werden nicht aktualisiert.

IList<MapElement> _MapItems; 
public IList<MapElement> MapItems { get { return _MapItems; } set { Set(ref _MapItems, value); RaisePropertyChanged(); } } 

IList<MapElement> MapItems = new List<MapElement>() { 
    new MapIcon() { 
     Location = new Geopoint(GeoPos_UserLocation), 
     Title = "You Are Here!" 
    } 
}; 

Quellen: Windows 10 SDK Bing Maps Control

Antwort

1

Ich löste dieses Problem mit der Tatsache, dass ich eine MapItemsControl.ItemTemplate hinzuzufügen haben. Ohne dies gibt es nichts mehr als den Namen des Steuerelements.

So fügen Sie einfach diesen Code:

<Maps:MapItemsControl x:Name="mainMapItems" ItemsSource="{Binding MapItems}"> 
<Maps:MapItemsControl.ItemTemplate> 
    <DataTemplate> 
    <StackPanel Background="Transparent"> 
    <TextBlock Maps:MapControl.Location="{Binding Location}" Text="{Binding Title}" Maps:MapControl.NormalizedAnchorPoint="0.5,0.5" FontSize="20" Margin="5"/> 
    </StackPanel> 
    </DataTemplate> 
</Maps:MapItemsControl.ItemTemplate> 
</Maps:MapItemsControl> 

Es ist nicht perfekt, weil dies nicht ein Symbol auf der Karte geben, sondern nur Text. Aber es kann leicht mit dem Hinzufügen von Image = "" in der Sammlung gelöst werden.

1

Versuchen

ObservableCollection ObserverableCollection<MapElement> MapItems = new ObservableCollection<MapElement>();

mit Da Sie das Element erwarten verschiedene etwas zu sein „aktualisierbar zur Laufzeit“ oder reagieren auf Veränderungen ObservableCollection hinter den Kulissen implementiert INPC

+0

Dies nicht zu tun haben. Die Objekte werden immer noch nicht auf der Karte angezeigt. – Startail

Verwandte Themen