[英]Xamarin Forms List in Listview
我需要在列表視圖中顯示 api 的請求。 一切正常,但我有一個屬性(注釋),它返回一個列表並給出以下錯誤消息:
System.Collections.Generic.List`1[System.String]
有誰知道解決方案?
TicketPage.xaml.cs
public async void LoadTickets()
{
var content = "";
HttpClient client = new HttpClient();
var RestURL = "https://...";
client.BaseAddress = new Uri(RestURL);
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(RestURL);
if (response.IsSuccessStatusCode)
{
content = await response.Content.ReadAsStringAsync();
Ticket item = JsonConvert.DeserializeObject<Ticket>(content);
List<Ticket> items = new List<Ticket> { item };
ListViewTicket.ItemsSource = items;
}
else
{
await DisplayAlert("Error", "Testtext","Ok");
}
}
TicketPage.xaml
<ContentPage.Content>
<StackLayout Padding="10">
<ListView x:Name="ListViewTicket" ItemsSource="{Binding Items}" HasUnevenRows="True" SelectionMode="None" SeparatorVisibility="None">
<ListView.Header>
<StackLayout Orientation="Horizontal">
<Label Text="Im nachfolgenden sehen Sie Ihre offenen Tickets" FontSize="Medium"/>
</StackLayout>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical">
<BoxView HorizontalOptions="FillAndExpand" HeightRequest="5" Color="Blue" />
<Grid>
<Label Grid.Column="0" Text="Ticket ID:"/>
<Label Grid.Column="1" Text="{Binding id}" Padding="-60,0,0,0"/>
</Grid>
<Grid>
<Label Grid.Column="0" Text="Ticket Status:"/>
<Label Grid.Column="1" Text="{Binding status}" Padding="-60,0,0,0"/>
</Grid>
<Grid>
<Label Grid.Column="0" Text="Ticket Betreff:"/>
<Label Grid.Column="1" Text="{Binding subject}" Padding="-60,0,0,0"/>
</Grid>
<Grid>
<Label Grid.Column="0" Text="Ticket Nachricht:"/>
<Label Grid.Column="1" Text="{Binding message}" Padding="-60,0,0,0"/>
</Grid>
<Grid>
<Label Grid.Column="0" Text="Ticket Notiz:"/>
<Label Grid.Column="1" Text="{Binding notes}" Padding="-60,0,0,0"/>
</Grid>
<BoxView HorizontalOptions="FillAndExpand" HeightRequest="5" Color="Blue" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
System.Collections.Generic.List`1[System.String]
由於屬性 ( notes
) 返回一個列表,因此您不能簡單地將其綁定到Label
。在這種情況下,它將顯示:
System.Collections.Generic.List1[System.String]
<Grid>
<Label Grid.Column="0" Text="Ticket Notiz:"/>
<Label Grid.Column="1" Text="{Binding notes}" Padding="-60,0,0,0"/>
</Grid>
有誰知道解決方案?
為此,您可以使用分組列表視圖來實現此目的。 更多檢查: 分組 ListView 。
你也可以定義兩個頁面,一旦我們點擊out listview,我們可以導航到第二個頁面或者只是彈出相關注釋列表,就像Jason提到的那樣。
您可以使用BindableLayout
來顯示項目集合,而無需將其包裝在另一個ListView
中。 可以這樣做:
<ContentPage.Content>
<StackLayout Padding="10">
<ListView ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical">
<Grid>
<Label Grid.Column="0" Text="Ticket ID:"/>
<Label Grid.Column="1" Text="{Binding id}"/>
</Grid>
<!-- I've removed some code for brevity -->
<Grid>
<Label Grid.Column="0" Text="Ticket Notiz:"/>
<!-- HERE! display collection of notes, each note in it's own Label -->
<StackLayout Grid.Column="1" BindableLayout.ItemsSource="{Binding notes}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Label Text="{Binding .}"/>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</Grid>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.