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