Искажение дизайна страницы при навигации Назад ListView Xamarin Forms - PullRequest
0 голосов
/ 12 марта 2019

В основном у меня есть следующий код на моем ItemTemplate

<Frame BorderColor="{Binding Path=BindingContext.ColorTwo, Source={x:Reference Name=AuctionListViewXaml}}"  BackgroundColor="{Binding Path=BindingContext.ColorOne, Source={x:Reference Name=AuctionListViewXaml}}" Padding="2" HeightRequest="{Binding Path=LeilaoHeight, Source={x:Reference Name=AuctionListViewXaml}}" CornerRadius="0">
    <Grid HorizontalOptions="FillAndExpand">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="5*"/>
        </Grid.ColumnDefinitions>
        <StackLayout Grid.Column="0" Spacing="0" Margin="0,0,0,0">
            <Image VerticalOptions="Center" HorizontalOptions="Center" Source="{Binding ProdutoImagem}"  Aspect="AspectFit" />
        </StackLayout>
        <Grid Grid.Column="1" ColumnSpacing="0" RowSpacing="0" HorizontalOptions="FillAndExpand" Margin="0,0,5,0">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <!--<RowDefinition Height="*"/>-->
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Label Grid.Row="0" Grid.Column="0" Text="{Binding TextName}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="Center" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
            <Label Grid.Row="0" Grid.Column="1" Text="{Binding Nome}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="Center" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
            <BoxView Color="{Binding Path=BindingContext.ColorTwo, Source={x:Reference Name=AuctionListViewXaml}}" Grid.Row="0" Grid.Column="0" HorizontalOptions="FillAndExpand" VerticalOptions="End" HeightRequest="1"/>
            <BoxView Color="{Binding Path=BindingContext.ColorTwo, Source={x:Reference Name=AuctionListViewXaml}}" Grid.Row="0" Grid.Column="1" HorizontalOptions="FillAndExpand" VerticalOptions="End" HeightRequest="1"/>
            <Label Grid.Row="1" Grid.Column="0" Text="{Binding TextPrize}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="Center" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
            <Label Grid.Row="1" Grid.Column="1" Text="{Binding ProdutoNome}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="Center" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
            <BoxView Color="{Binding Path=BindingContext.ColorTwo, Source={x:Reference Name=AuctionListViewXaml}}" Grid.Row="1" Grid.Column="0" HorizontalOptions="FillAndExpand" VerticalOptions="End" HeightRequest="1"/>
            <BoxView Color="{Binding Path=BindingContext.ColorTwo, Source={x:Reference Name=AuctionListViewXaml}}" Grid.Row="1" Grid.Column="1" HorizontalOptions="FillAndExpand" VerticalOptions="End" HeightRequest="1"/>
            <Label Grid.Row="2" Grid.Column="0" Text="{Binding TextMinimumBid}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="Center" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
            <Label Grid.Row="2" Grid.Column="1" Text="{Binding QuantidadePontos}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="Center" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
            <!--<Label Grid.Row="3" Grid.Column="0" Text="{Binding TextLastBid}"  VerticalOptions="CenterAndExpand" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
            <Label Grid.Row="3" Grid.Column="1" Text="{Binding UltimoLance}"  VerticalOptions="CenterAndExpand" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/> -->
            <BoxView Color="{Binding Path=BindingContext.ColorTwo, Source={x:Reference Name=AuctionListViewXaml}}" Grid.Row="2" Grid.Column="0" HorizontalOptions="FillAndExpand" VerticalOptions="End" HeightRequest="1"/>
            <BoxView Color="{Binding Path=BindingContext.ColorTwo, Source={x:Reference Name=AuctionListViewXaml}}" Grid.Row="2" Grid.Column="1" HorizontalOptions="FillAndExpand" VerticalOptions="End" HeightRequest="1"/>
            <Label Grid.Row="3" Grid.Column="0" Text="{Binding TextExpiration}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="Center" VerticalTextAlignment="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
            <Label Grid.Row="3" Grid.Column="1" Text="{Binding TempoRestante, Mode=TwoWay}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalOptions="Center"  TextColor="{Binding Path=BindingContext.TextColor, Source={x:Reference Name=AuctionListViewXaml}}"/>
        </Grid>
    </Grid>
</Frame>

, который переводит элементы в ListView ниже

NonDistorted

И всякий раз, когда я перехожу вперед на другую страницу, если я нажимаю назад, весь вид искажается

Этот пример ниже представляет собой мягкий пример искажения, проверьте наличие текста на второй карточке в просмотре списка, пропущены слова, но основной размер макета остается прежним, если экран меньше, он будет резать все намного больше.

Distorted

Есть кто-нибудькогда-нибудь были проблемы с этим раньше?Это происходит в следующих случаях: я возвращаюсь с другого экрана.Объект добавлен в список из другого списка.

Я перепробовал множество вещей, и это постоянно происходит на Android, насколько я знаю, iOS не содержит ошибок.

Xamarin Forms 3.4.0 список, который я использую, является списком syncfusion.

Редактировать: также происходит в представлении списка xamarin

ContentPage:

using System;
using System.Collections.Generic;
using System.Timers;
using System.Collections.ObjectModel;
using System.Linq;
using AppAlice.Localization;
using AppAlice.Models;
using AppAlice.UiModels;
using AppAlice.ViewModels;
using Syncfusion.ListView.XForms;
using Xamarin.Forms;

namespace AppAlice.Views
{
    public partial class AuctionListView : ContentPage
    {
        public AuctionListViewModel viewModel;
        MainPage RootPage { get => Application.Current.MainPage as MainPage; }

        public double ScreenWidth { get; set; } = App.ScreenWidth;
        public double ScreenHeight { get; set; } = App.ScreenHeight;
        public double LeilaoHeight { get; set; } = App.ScreenWidth / 4;



        public AuctionListView()
        {
            Title = AppResources.ResourceManager.GetString("AuctionListViewTitle");
            BindingContext = viewModel = new AuctionListViewModel();
            LeilaoHeight = App.ScreenWidth / 4;
            InitializeComponent();
            activatedButton.Text = AppResources.Active;
            availableButton.WidthRequest = activatedButton.WidthRequest = ScreenWidth / 2;
            availableButton.Text = AppResources.Available;
            HelloLabel.Text = AppResources.Hello;
            SaldoLabel.Text = AppResources.Balance + ": ";
            //XpLabel.Text = AppResources.PointsInBids;
            AuctionLabel.Text = AppResources.PointsAuction;
        }

        private void availableButton_Pressed(object sender, EventArgs e)
        {
            activatedListView.IsVisible = false;
            activatedButton.BackgroundColor = App.ColorThree;
            availableListView.IsVisible = true;
            availableButton.BackgroundColor = App.ColorTwo;


        }

        private void activatedButton_Pressed(object sender, EventArgs e)
        {
            availableListView.IsVisible = false;
            availableButton.BackgroundColor = App.ColorThree;
            activatedListView.IsVisible = true;
            activatedButton.BackgroundColor = App.ColorTwo;

        }

        async void Handle_ItemTapped(object sender, Xamarin.Forms.ItemTappedEventArgs e)
        {
            Leilao leilao = e.Item as Leilao;
            await Navigation.PushModalAsync(new NavigationPage(new AuctionPage(leilao)) { BarBackgroundColor = App.ColorTwo, BarTextColor = App.TextColor });

        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            if (viewModel.OnAppearingCommand.CanExecute(null))
                viewModel.OnAppearingCommand.Execute(null);
        }

        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            if (viewModel.OnDissappearingCommand.CanExecute(null))
                viewModel.OnDissappearingCommand.Execute(null);
        }


        protected override bool OnBackButtonPressed()
        {
            RootPage.NavigateFromMenu((int)MenuItemType.Browse);
            return true;
        }

    }
}

Соответствующие методы ViewModel:

private void OnDisappearing()
{
    Timer.Stop();
}

private async Task OnAppearing()
        {
            AvailableAuctions.Clear();
            ActivatedAuctions.Clear();
            OnPropertyChanged("AvailableAuctions");
            OnPropertyChanged("ActivatedAuctions");
            Timer.Start();
            Timer.Interval = 500; // 0.1 seconds
            await Task.Run(async () =>
            {
                try
                {
                    Perfil = CallsWrapper.GetUser();
                    Nome = Perfil.Nome;
                    Saldo = Perfil.PontuacaoAtual;
                    Xp = Perfil.PontuacaoHistorico;
                    Imagem = Perfil.Foto.Url;

                    if (CallsWrapper.IsOnline())
                    {
                        LeilaoDtoDataStore leilaoDtoDataStore = new LeilaoDtoDataStore(Perfil.Id);
                        var leiloes = await leilaoDtoDataStore.GetItemsAsync();


                        foreach (var l in leiloes.Where(i => i.MeuUltimoLance == 0)) AvailableAuctions.Add(l);
                        foreach (var l in leiloes.Where(i => i.MeuUltimoLance != 0)) ActivatedAuctions.Add(l);
                        //AvailableAuctions = new ObservableCollection<Leilao>(leiloes.Where(i => i.MeuUltimoLance == 0));
                        //ActivatedAuctions = new ObservableCollection<Leilao>(leiloes.Where(i => i.MeuUltimoLance != 0));
                    }
                    else
                    {
                        //TODO: TEXTO FALANDO QUE NAO ESTA ONLINE
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Data);
                    Console.WriteLine(e.Message);
                    Console.WriteLine(e.StackTrace);
                    Perfil = new PerfilClienteDto();
                    Nome = Perfil.Nome;
                    Saldo = Perfil.PontuacaoAtual;
                    Xp = Perfil.PontuacaoHistorico;

                }
                finally

                {
                    Timer.Elapsed += Timer_Elapsed;
                    OnPropertyChanged("Perfil");
                    OnPropertyChanged("Nome");
                    OnPropertyChanged("Saldo");
                    OnPropertyChanged("Xp");
                    OnPropertyChanged("Imagem");
                }
            });
        }

private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                foreach (Leilao s in ActivatedAuctions)
                {
                    s.Temporizador = getTimeLeft(s.DataEncerramento);
                    if (s.Temporizador.TotalDays > 0)
                    {
                        if (s.Temporizador.TotalDays > 1 && s.Temporizador.TotalDays < 2)
                            s.TempoRestante = string.Format("{0} Dia", (int)s.Temporizador.TotalDays);
                        else
                        {
                            s.TempoRestante = string.Format("{0} Dias", (int)s.Temporizador.TotalDays);
                        }
                    }
                    else
                    {
                        s.TempoRestante = string.Format("{0}h {1}m {2}s", (int)s.Temporizador.TotalHours, s.Temporizador.Minutes, s.Temporizador.Seconds);
                    }
                    s.OnPropertyChanged("TempoRestante");
                }
                foreach (Leilao s in AvailableAuctions)
                {
                    s.Temporizador = getTimeLeft(s.DataEncerramento);
                    if(s.Temporizador.TotalDays > 0)
                    {
                        if (s.Temporizador.TotalDays > 1 && s.Temporizador.TotalDays < 2)
                            s.TempoRestante = string.Format("{0} Dia", (int)s.Temporizador.TotalDays);
                        else
                        {
                            s.TempoRestante = string.Format("{0} Dias", (int)s.Temporizador.TotalDays);
                        }
                    }
                    else
                    {
                        s.TempoRestante = string.Format("{0}h {1}m {2}s", (int)s.Temporizador.TotalHours, s.Temporizador.Minutes, s.Temporizador.Seconds);
                    }
                    s.OnPropertyChanged("TempoRestante");
                }
                //OnPropertyChanged("AvailableAuctions");
                //OnPropertyChanged("ActivatedAuctions");
            });
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...