ListView仅在播放后显示数据

时间:2018-10-26 17:19:32

标签: xaml xamarin xamarin.forms

我很难在Xamarin中使用XAML。表单:无需显示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 :(得分:0)

被发现!使用Task时,问题出在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
        }