微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 VM 中更改 Map 的 MapType?

如何解决如何在 VM 中更改 Map 的 MapType?

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

ContentView
            AbsoluteLayout.LayoutBounds="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 帮助

解决方法

我有一个要从 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;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。