簡體   English   中英

Xamarin Forms 在列表視圖中列出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM