Как мне заполнить ListView, используя x:Bind и System.Collections.Generic.List и генерировать столбцы

Я пытаюсь заполнить ListView списком при настройке ItemsSource как x:Bind, и я не могу понять, как сделать столбцы и заставить элементы отображаться правильно.

Вот что я получил до сих пор:

Класс Customer в Database.cs

public class Customer
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string CompanyName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Phone { get; set; }
    public string Email { get; set; }
    public string Adress { get; set; }
    public int PostCode { get; set; }
    public string PostArea { get; set; }
    public string CreatedDate { get; set; }
    public string UpdatedDate { get; set; }
}

Метод FetchCustomer в Database.cs, который возвращает список объектов Customer

public List<Customer> FetchCustomer()
{
    using (SQLiteConnection _connection = new SQLiteConnection(sqlitePlatform, dbFilePath))
    {
        List<Customer> customers = new List<Customer>();
        var _customers = _connection.Table<Customer>();
        foreach (Customer customer in _customers)
        {
            customers.Add(customer);
        }
        return customers;
    }
}

Страница CustomerView

public sealed partial class CustomerView : Page
{
    public List<Customer> CustomersFromDB { get; set; }

    public CustomerView()
    {
        this.InitializeComponent();
        ReadyCustomers();
    }

    private void ReadyCustomers()
    {
        var db = new Database();
        CustomersFromDB = db.FetchCustomer();
    }
}

XAML, где я связываю ItemsSource

<ListView Grid.Row="1" ItemsSource="{x:Bind CustomersFromDB}"/>

Как мне сделать это так, чтобы столбцы генерировались автоматически и элементы отображались правильно?

Я пытался добавить ListViewHeaderItem с и просматривать различные свойства, но еще не выяснил, как это сделать.

<ListView Grid.Row="1" ItemsSource="{x:Bind CustomersFromDB}">
    <ListView.Header>
        <ListViewHeaderItem ???></ListViewHeaderItem>
    </ListView.Header>
</ListView> 

Результат, который я получаю только с привязкой:

Снимок приложения, показывающий, что ItemsSource работает, но не так, как задумано, а только показывает: AuraFaktura.Customer в каждом ListViewItem

Обновить

Я добился определенного прогресса сегодня, и теперь у меня есть правильный вывод данных. Я обнаружил, что с помощью DataTemplate я могу установить Binding для элементов.

Я все еще пытаюсь показать данные в правильном порядке.

Вот XAML, который я сейчас написал:

<GridView Grid.Row="1" ItemsSource="{x:Bind CustomersFromDB}" HorizontalAlignment="Stretch">
    <GridViewHeaderItem Content="CompanyName"></GridViewHeaderItem>
    <GridViewHeaderItem Content="FirstName"></GridViewHeaderItem>
    <GridViewHeaderItem Content="LastName"></GridViewHeaderItem>
    <GridViewHeaderItem Content="Phone"></GridViewHeaderItem>
    <GridViewHeaderItem Content="Email"></GridViewHeaderItem>
    <GridViewHeaderItem Content="Adress"></GridViewHeaderItem>
    <GridViewHeaderItem Content="PostCode"></GridViewHeaderItem>
    <GridViewHeaderItem Content="PostArea"></GridViewHeaderItem>
    <GridViewHeaderItem Content="Comment"></GridViewHeaderItem>
    <GridView.ItemTemplate>
        <DataTemplate>
            <GridViewItem BorderThickness="0" BorderBrush="Transparent">
                <GridViewItem.Content>
                    <StackPanel Orientation="Horizontal" BorderThickness="0" BorderBrush="Transparent">
                        <TextBlock Text="{Binding CompanyName}"></TextBlock>
                        <TextBlock Text="{Binding FirstName}"></TextBlock>
                        <TextBlock Text="{Binding LastName}"></TextBlock>
                        <TextBlock Text="{Binding Phone}"></TextBlock>
                        <TextBlock Text="{Binding Email}"></TextBlock>
                        <TextBlock Text="{Binding Adress}"></TextBlock>
                        <TextBlock Text="{Binding PostCode}"></TextBlock>
                        <TextBlock Text="{Binding PostArea}"></TextBlock>
                        <TextBlock Text="{Binding Comment}"></TextBlock>
                        <TextBlock Text="{Binding CreatedDate}"></TextBlock>
                        <TextBlock Text="{Binding UpdatedDate}"></TextBlock>
                    </StackPanel>
                </GridViewItem.Content>
            </GridViewItem>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

И результат:

Снимок приложения, показывающий, что DataTemplate каким-то образом работает, но не отображается так, как задумано, поскольку элементы усекаются, а элементы заголовка не отображаются

Таким образом, вы можете видеть, что GridViewHeaderItem не отображаются, а GridViewItem не отображаются должным образом.

Вот результат, который я хочу закончить:

Снимок результата, который я хочу получить

Как мне продолжить писать свой XAML для достижения такого результата?

1 ответ

Просто примените margin к textblocks margin="5,0,5,0"

Другие вопросы по тегам