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 = "" を追加することで簡単に解決できます。


Template10 レイアウトで MapControl を使用しようとしています。

私が使用するコードは

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

Map_Loaded 関数は、実行されたとおりに起動されます。私が問題を抱えているのは、これが通常のプロジェクトであれば、MapControl1.Center と MapControl1.MapElements.Add に直接データを設定することです。しかし、これはMVVMプロジェクトであるため、これはどのように行われるかではなく、どのように進めるかについて少し混乱しています.

Views.MainPage.MapControl1.Center = new Geopoint() のようなことをしたいのですが、明らかにうまくいきません。


追加の更新

結局のところ、これは私が思っていたのと同じくらい簡単でした。正しい順序で考えるだけの問題でした。

MapControl には、Zooming や Center などのコントロールがあります。したがって、MVVMコードの場合、これは機能します

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

ただし、ソースのドキュメントに記載されているように、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 コントロール

4

2 に答える 2

1

使ってみて

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

アイテムが「実行時に更新可能」であるか、変更に反応することを期待しているため、舞台裏で ObservableCollection が INPC を実装します。

于 2016-07-27T16:31:38.367 に答える
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 = "" を追加することで簡単に解決できます。

于 2016-07-24T15:59:12.163 に答える