ListView отображает данные только после воспроизведения - PullRequest
0 голосов
/ 26 октября 2018

Мне трудно с XAML в Xamarin. Формы: страница вызывается и отображается без загрузки данных из ListView (хотя ListView визуализируется, поскольку он меняет цвет фона в своей области).

Затем, после того как я коснулся области ListView, данные были представлены, то есть изначально ListView ничего не показывает, а после моего прикосновения к экрану он отображает данные. Однако у меня нет событий, вызывающих обновление. Я уже убедился в коде, что данные получены им правильным образом. У кого-нибудь есть предложения?

Ниже приведен код XAML:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Coletas.Layouts.DetalheColeta">
    <ContentPage.ToolbarItems>
        <ToolbarItem Name="itemVisualizar" Order="Primary" Icon="pesquisar.png" Text="Visualizar" Priority="0" />
    </ContentPage.ToolbarItems>
    <ListView x:Name="Coleta" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="#FFCC80">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout Orientation="Vertical">
                        <Label Text="{Binding Coleta, StringFormat='Coleta {0:000000}'}" FontAttributes="Bold" FontSize="12"/>

                        <Label Text="{Binding Remetente}" FontAttributes="Bold" FontSize="12"/>
                        <Label Text="{Binding EnderecoRem}"/>
                        <Label Text="{Binding BairroRem}"/>
                        <Label Text="{Binding CidadeRem}"/>
                        <Label Text="{Binding ReferenciaRem}"/>

                        <Label Text="{Binding Destinatario}" FontAttributes="Bold" FontSize="12"/>
                        <Label Text="{Binding CidadeDes}"/>

                        <StackLayout Orientation="Horizontal" >
                            <Label Text="{Binding Peso, StringFormat='Peso: {0:0.00}'}"/>
                            <Label Text=" "/>
                            <Label Text="{Binding Quantidade, StringFormat='Volume: {0:0.00}'}"/>
                        </StackLayout>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage>

Код, который вызывает страницу DetalheColeta, приведен ниже. Этот код находится на другой отдельной странице:

private void GradeColetas_ItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var item = e.SelectedItem as GridList;

            if (item != null)
            {
                var id = item.Coleta;
                Navigation.PushAsync(new DetalheColeta(id));
                ((ListView)sender).SelectedItem = null;
            };            
        }

Есть идеи?

1 Ответ

0 голосов
/ 26 октября 2018

Обнаруженный! Проблема в конструкторе страницы DetalheColeta при использовании Задачи. В XAML и вызове предыдущей страницы нет ничего плохого. Я запустил программу в UWP, и появилось сообщение: «Приложение вызвало интерфейс, созданный для другого потока». Я тестировал в Xamarin Live Player и не выдавал ошибку. При исправлении звонка пришел на работу.

До:

public DetalheColeta (int collection)
        {
            InitializeComponent () 
            Coleta_DetalheAsync (Collection)
        }

Сейчас:

public DetalheColeta (int collection)
        {
            InitializeComponent ()
            Coleta_DetalheAsync (collection).Wait ();
        }

До:

Private async void Coleta_DetalheAsync (int collection)
        {
        Code
        }

Сейчас:

Private async Task Coleta_DetalheAsync (int collection)
        {
        Code
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...