ArcGis Map在导航Xamarin.Forms中不会消失

时间:2018-05-30 09:30:17

标签: xamarin.forms xamarin.android arcgis

大家好:D我遇到了Xamarin.Forms的android部分的问题

当我从带有Map和TabbleView(enter image description here)的AbsoluteLayout导航到只有Map的Grid时,上一页的Map在第二页上保持静态(enter image description here) 。此问题不会在iOS中显示,仅在Android中显示。如果你们中的任何人都知道这个问题,请告诉我,我可以快速解决:D

第一张地图的页面

<input id="field25" name="action" type="text" value="" class="field-size-top-large" disabled="disabled">

背后的代码

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="SGPI.Intervencao.CriarIntervencao"
         xmlns:local="clr-namespace:SGPI.Shared"
         xmlns:esriUI="clr-namespace:Esri.ArcGISRuntime.Xamarin.Forms;assembly=Esri.ArcGISRuntime.Xamarin.Forms"
         Padding="5,5">
<ContentPage.Resources>
    <ResourceDictionary>
        <local:MapViewModel x:Key="MapViewModel" />
    </ResourceDictionary>
</ContentPage.Resources>
<AbsoluteLayout>
    <esriUI:MapView Map="{Binding Map, Source={StaticResource MapViewModel}}" x:Name="map" AbsoluteLayout.LayoutBounds="0,0, 1, 0.6" AbsoluteLayout.LayoutFlags="All"/>
    <TableView Intent="Form" HasUnevenRows="True" AbsoluteLayout.LayoutBounds="0,1, 1, 0.4" AbsoluteLayout.LayoutFlags="All">
        <TableRoot>
            <TableSection Title="Information">
                <EntryCell Label="Nome" Text="{Binding Name}" Placeholder="Nome"/>
                <EntryCell Label="Codigo" Text="{Binding Code}" Placeholder="Codigo"/>
                <ViewCell>
                    <StackLayout Orientation="Horizontal">
                        <Label Text="Status" HorizontalOptions="Start" VerticalOptions="Center"/>
                        <Picker x:Name="pick" SelectedIndex="{Binding Index}" SelectedItem="{Binding Status}" Title="Status" HorizontalOptions="FillAndExpand">
                            <Picker.Items>
                                <x:String>Em Construção</x:String>
                                <x:String>Construido</x:String>
                            </Picker.Items>
                        </Picker>
                    </StackLayout>
                </ViewCell>
                <ViewCell>
                    <Button Image="editMap.png" Clicked="Button_Clicked" />
                </ViewCell>
            </TableSection>
        </TableRoot>
    </TableView>
</AbsoluteLayout>
<ContentPage.ToolbarItems>
    <ToolbarItem Icon="dan.png" Order="Primary" x:Name="done" Clicked="Done"/>
</ContentPage.ToolbarItems>

第二页

    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;


     using Xamarin.Forms;
       using Xamarin.Forms.Xaml;
       namespace SGPI.Intervencao

   {



    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class CriarIntervencao : ContentPage
    {

    public event EventHandler<IntervencaoClass> IntervencaoAdded;
    public event EventHandler<IntervencaoClass> IntervencaoUpdated;

        public CriarIntervencao(IntervencaoClass intervencao)
        {

            if(intervencao == null)
                throw new ArgumentNullException(nameof(intervencao));

            InitializeComponent();
            BindingContext = new IntervencaoClass
            {
                Code = intervencao.Code,
                Name = intervencao.Name,
                Status = intervencao.Status,
                Index = intervencao.Index,
                Id = intervencao.Id,
                Polygons = intervencao.Polygons
            };
            if(intervencao.Polygons != null)
                map.GraphicsOverlays.Add(intervencao.Polygons);
        }

        private async void Done(object sender, EventArgs e)
         {
            var intervencao = BindingContext as IntervencaoClass;
            if (filled())
            {
                await DisplayAlert("Erro", "Preenche tudo", "OK");
                return;
            }
            map.GraphicsOverlays.Clear();
            if (!intervencao.Id.HasValue)
            {
                intervencao.Id = 1;
                IntervencaoAdded?.Invoke(this, intervencao);
            }
            else
            {
                IntervencaoUpdated?.Invoke(this, intervencao);
            }

            await Navigation.PopAsync();
        }

        public bool filled()
        {
            var intervencao = BindingContext as IntervencaoClass;
            return String.IsNullOrEmpty(intervencao.Name) || String.IsNullOrEmpty(intervencao.Code) || pick.SelectedIndex == -1;
        }

        private async void Button_Clicked(object sender, EventArgs e)
        {
            map.GraphicsOverlays.Clear();
            var page = new MapPages.MapPage((BindingContext as IntervencaoClass).Polygons);
            page.AcceptedMap += (send, graphics) => {
                var intervencao = BindingContext as IntervencaoClass;
                intervencao.Polygons = graphics;
                map.GraphicsOverlays.Add(graphics);
                Navigation.PopAsync();
            };
            await Navigation.PushAsync(page);
        }

    }
}

第二页代码背后

    <?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:local="clr-namespace:SGPI.Shared"
             xmlns:esriUI="clr-namespace:Esri.ArcGISRuntime.Xamarin.Forms;assembly=Esri.ArcGISRuntime.Xamarin.Forms"
             x:Class="SGPI.MapPages.MapPage">
    <ContentPage.Resources>
        <ResourceDictionary>
            <local:MapViewModel x:Key="MapViewModel" />
        </ResourceDictionary>
    </ContentPage.Resources>
    <Grid>
            <esriUI:MapView Map="{Binding Map, Source={StaticResource MapViewModel}}" x:Name="map" GeoViewTapped="Map_GeoViewTapped"/>
    </Grid>
    <ContentPage.ToolbarItems>
        <ToolbarItem Icon="dan.png" Clicked="Done"/>
    </ContentPage.ToolbarItems>
</ContentPage>

0 个答案:

没有答案