首页 > 解决方案 > 如何在虚拟机中更改 Map 的 MapType?

问题描述

我有一张想要从 VM 添加的地图。当您单击按钮时,我尝试添加命令 MapType 将被更改。但它不起作用。我知道如何在代码隐藏中制作它。但我需要 VM

ContentView
            AbsoluteLayout.LayoutBounds="0, 0, 1, 1"
            AbsoluteLayout.LayoutFlags="All"
            Content="{Binding Map}" />

虚拟机

        public Map Map { get; set; } 
        public Command StandartMapCommand { get; set; }

        public Command SatelliteMapCommand { get; set; }

        public Command HybridMapCommand { get; set; }
      public MasterPageVM()
        {
             Map = new Map();
           StandartMapCommand = new Command(StandardSelected);
            SatelliteMapCommand = new Command(SatelliteSelected);
            HybridMapCommand = new Command(HybridSelected);
       }
   public void StandardSelected()
        {
         
                Map.MapType = Xamarin.Forms.Maps.MapType.Street;

           
        }

        public void HybridSelected()
        {
        
                Map.MapType = Xamarin.Forms.Maps.MapType.Hybrid;
            }

        

        public void SatelliteSelected()
        {
         
                Map.MapType = Xamarin.Forms.Maps.MapType.Satellite;

        }

当我点击按钮地图不会改变 MapType.pls 帮助

标签: c#xamarinxamarin.forms

解决方案


我有一张想要从 VM 添加的地图。当您单击按钮时,我尝试添加命令 MapType 将被更改。但它不起作用。我知道如何在代码隐藏中制作它。但我需要 VM

如果你想改变 viewmodel 中的 Map.Maptype,你可以看看下面的代码。

<ContentPage.Content>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <ContentView Grid.ColumnSpan="3" Content="{Binding Map}" />
        <Button
            x:Name="btn1"
            Grid.Row="1"
            Command="{Binding StandartMapCommand}"
            Text="Street" />
        <Button
            x:Name="btn2"
            Grid.Row="1"
            Grid.Column="1"
            Command="{Binding SatelliteMapCommand}"
            Text="Satellite" />
        <Button
            x:Name="btn3"
            Grid.Row="1"
            Grid.Column="2"
            Command="{Binding HybridMapCommand}"
            Text="Hybrid" />

    </Grid>


</ContentPage.Content>

public partial class Page1 : ContentPage
{
    public Page1 ()
    {
        InitializeComponent ();         
        this.BindingContext = new MapViewModel();
    }
}
public class MapViewModel
{
    private Map _map;
    public Map Map
    {
        get { return _map; }
        set
        {
            _map = value;
                    
        }
    }
    public Command StandartMapCommand { get; set; }
    public Command SatelliteMapCommand { get; set; }
    public Command HybridMapCommand { get; set; }
    public MapViewModel()
    {
        Map = new Map();
        Position position = new Position(36.9628066, -122.0194722);
        MapSpan mapSpan = new MapSpan(position, 0.01, 0.01);
        Map.MoveToRegion(mapSpan);
        Map.Pins.Add(new Pin
        {
            Label = "Xamarin",
            Position = position
        });

        StandartMapCommand = new Command(streetcommand);
        SatelliteMapCommand = new Command(Satellitecommand);
        HybridMapCommand = new Command(Hybridcommand);
      
    }

    private void streetcommand()
    {
        Map.MapType = MapType.Street;
    }
    private void Satellitecommand()
    {
        Map.MapType = MapType.Satellite;
    }
    private void Hybridcommand()
    {
        Map.MapType = MapType.Hybrid;
    }
}

推荐阅读