2016-07-23 7 views
1

내가이 MapItemsControl.ItemTemplate를 추가해야한다는 사실과이 문제를 해결MapControl Template10는

를 해결했다. 이것이 없으면 컨트롤의 이름 이외의 것을 렌더링하지 않습니다. 이 당신에게지도에 아이콘을 제공하지 않기 때문에

<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> 

그것은 완벽 하진 않고, 단지 텍스트 :

그래서 그냥이 코드를 추가합니다. 그러나 Image = ""를 Collection에 추가하면 쉽게 해결할 수 있습니다.


MapControl을 Template10 레이아웃으로 사용하려고합니다.

내가 사용하는 코드에서 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; 
    } 

exepcted 같이 Map_Loaded 기능이 해고

입니다. 문제가있는 것은 이것이 정상적인 프로젝트라면 MapControl1.Center 및 MapControl1.MapElements.Add에 직접 데이터를 설정한다는 것입니다. 그러나 이것이 MVVM 프로젝트이기 때문에 이것이 완료된 방법이 아니며 진행 방법에 대해 약간 혼란 스럽습니다.

Views.MainPage.MapControl1.Center = new Geopoint()와 같은 작업을하고 싶습니다. 그러나 명확하게 작동하지 않습니다.


는이 생각만큼 쉬웠다 밝혀

으로 추가 업데이트. 올바른 순서로 사고하는 것입니다.

MapControl에는 확대/축소 및 가운데 등의 컨트롤이 있습니다. MVVM 코드를이

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

작동 그래서 나는 그러나 문서 I 소스에 설명 된대로 MapItems을 설정하는 문제를 가지고있다.

는 MapItemsControl을 추가 할 필요가지도에 표시된 항목을 얻으려면 그것은

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

... 등 같은 작업을해야하지만 MainPageViewModel.xaml에 내 코드이 작동하지 않습니다. 항목이 업데이트되지 않습니다.

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!" 
    } 
}; 

출처 : Windows 10 SDK Bing Maps Control

답변

1

나는 내가 MapItemsControl.ItemTemplate를 추가해야한다는 사실과이 문제를 해결했다. 이것이 없으면 컨트롤의 이름 외에 아무것도 렌더링하지 않습니다.이 당신에게지도에 아이콘을 제공하지 않기 때문에

<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> 

그것은 완벽 하진 않고, 단지 텍스트 :

그래서 그냥이 코드를 추가합니다. 그러나 Image = ""를 Collection에 추가하면 쉽게 해결할 수 있습니다.

1

는 "런타임에 업데이트 할"수 또는 뒤에서 변경 ObservableCollection에 반응하는 항목을 기대하기 때문에

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

를 사용해보십시오는 INPC가

+0

이 다른 아무것도하지 않았다 구현합니다. 항목이 여전히지도에 표시되지 않습니다. – Startail