我很难在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;
};
}
有什么主意吗?
答案 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
}