Невозможно передать данные из переменной в XAML - Xamarin Forms, приложение карты - PullRequest
1 голос
/ 31 января 2020

Я полностью застрял в этом.

Ниже рабочий код, все хорошо, и я вижу ожидаемую карту, но ...

<maps:Map Grid.Row="7" Grid.ColumnSpan="2">
    <x:Arguments>
        <maps:MapSpan>
            <x:Arguments>
                <maps:Position>
                    <x:Arguments>
                        <x:Double>39.808056</x:Double>
                        <x:Double>-5.696944</x:Double>
                    </x:Arguments>
                </maps:Position>
                <x:Double>0.01</x:Double>
                <x:Double>0.01</x:Double>
            </x:Arguments>
        </maps:MapSpan>
    </x:Arguments>
</maps:Map>

Когда я пытаюсь использовать переменная, все разваливается.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
             mc:Ignorable="d"
             x:Class="ProjectNuke.Views.ItemDetailPage"
             Title="{Binding Title}">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
         <Label Text="{Binding Item.Latitude}" Grid.Row="5" Grid.Column="1" FontSize="Small"/>
        <Label Text="Longtitude:" Grid.Row="6" Grid.Column="0"/>
        <Label Text="{Binding Item.Longtitude}" Grid.Row="6" Grid.Column="1" FontSize="Small"/>
        <maps:Map Grid.Row="7" Grid.ColumnSpan="2">
            <x:Arguments>
                <maps:MapSpan>
                    <x:Arguments>
                        <maps:Position>
                            <x:Arguments>
                                <x:Double>{Binding Item.Latitude}</x:Double>
                                <x:Double>{Binding Item.Longtitude}</x:Double>
                            </x:Arguments>
                        </maps:Position>
                        <x:Double>0.01</x:Double>
                        <x:Double>0.01</x:Double>
                    </x:Arguments>
                </maps:MapSpan>
            </x:Arguments>
        </maps:Map>

    </Grid>
</ContentPage>

Кажется, что {Binding Item.Latitude} не предоставляет значения, а карта показывает океан: (

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 31 января 2020

x:Arguments, который вы предоставляете элементу управления Map, является аргументом конструктора для элемента управления. Следовательно, вы не сможете связать эти значения.

Вам нужно будет изменить код, чтобы вместо него использовать метод MoveToRegion в элементе управления Map.

Если вы используете дизайн MVVM шаблон, вы, вероятно, прослушали бы изменения в своих свойствах Region или Latitude и Longitude и соответствующим образом скорректировали регион.

Итак, в вашей ViewModel:

private MapSpan _region;
public MapSpan Region
{
    get => _region;
    set
    {
        _region = value;
        RaisePropertyChanged(nameof(Region));
    }
}

И в вашем View:

ViewModel.NotifyPropertyChanged += OnNotifyPropertyChanged;

private void OnNotifyPropertyChanged(object sender, NotifyPropertyChangedEventArgs args)
{
     if (args.PropertyName == nameof(MapSpan))
     {
         Map.MoveToRegion(ViewModel.Region);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...