В основном у меня есть следующий код на моем 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](https://i.stack.imgur.com/ylHX9.jpg)
И всякий раз, когда я перехожу вперед на другую страницу, если я нажимаю назад, весь вид искажается
Этот пример ниже представляет собой мягкий пример искажения, проверьте наличие текста на второй карточке в просмотре списка, пропущены слова, но основной размер макета остается прежним, если экран меньше, он будет резать все намного больше.
![Distorted](https://i.stack.imgur.com/5ZL86.jpg)
Есть кто-нибудькогда-нибудь были проблемы с этим раньше?Это происходит в следующих случаях: я возвращаюсь с другого экрана.Объект добавлен в список из другого списка.
Я перепробовал множество вещей, и это постоянно происходит на 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");
});
}