Динамически добавлять строки в сетку в ListView - PullRequest
1 голос
/ 28 апреля 2020

У меня есть следующее ListView -

<ListView x:Name="listViewm" ItemsSource="{ Binding Rows }">
        <ListView.Header >
            <Grid >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="1*"></ColumnDefinition>
                    <ColumnDefinition Width="1*"></ColumnDefinition>
                    <ColumnDefinition Width="1*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Label Text="Name" Grid.Column="3"  FontSize="Medium" />
                <Label Text="Age" Grid.Column="2" FontSize="Medium" />
                <Label Text="DOB" Grid.Column="1" FontSize="Medium" />
            </Grid>
        </ListView.Header>

        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Grid >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="1*"></ColumnDefinition>
                            <ColumnDefinition Width="1*"></ColumnDefinition>
                            <ColumnDefinition Width="1*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>

                        <!--I need my Row values here-->

                    </Grid>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Мне нужно создать строку для каждой записи в списке и динамически добавить ее в сетку -

protected override void OnAppearing()
{
    CreateGrid();
}

public ObservableCollection<Row> Rows { get; set; }

public class Row
{
    public string Name { get; set; }
    public string Age { get; set; }
    public string DOB { get; set; }
}

public void CreateGrid()
{
    Rows = new ObservableCollection<Row>();
    Rows.Clear();

    foreach(var entry in entryList) { // entryList just contains values I use to populate row info 

        var row = new Row();
        row.Name = entry.name;
        row.Age = entry.age;
        row.DOB = entry.dob;

        Rows.Add(row);
    }
}

ItemSource не является обязательным, поэтому новые строки не создаются, я попытался удалить ItemsSource="{ Binding Rows }" в XAML и использовать listViewm.ItemsSource = Rows в коде, но это также не сработало.

Таким образом, если entryList имеет 3 тестовых записи для Джона, Боба и Билла, таблица должна выглядеть следующим образом -

+----------------+
| Name  Age DOB  |
+----------------+
| John  31 06/09 |
| Bill  32 07/10 |
| Bob   34 08/11 |
+----------------+

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

Вы не добавляете свои значения в список.

<ListView x:Name="listViewm" ItemsSource="{ Binding Rows }">
    <ListView.Header >
        <Grid >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="1*"></ColumnDefinition>
                <ColumnDefinition Width="1*"></ColumnDefinition>
                <ColumnDefinition Width="1*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Label Text="Name" Grid.Column="3"  FontSize="Medium" />
            <Label Text="Age" Grid.Column="2" FontSize="Medium" />
            <Label Text="DOB" Grid.Column="1" FontSize="Medium" />
        </Grid>
    </ListView.Header>

    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Grid >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="1*"></ColumnDefinition>
                        <ColumnDefinition Width="1*"></ColumnDefinition>
                        <ColumnDefinition Width="1*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <!--I need my Row values here-->
                    <Label Text="{Binding Name}" />
                    <Label Grid.Column="1" Text="{Binding Age}" />
                    <Label Grid.Column="2" Text="{Binding DOB}" />

                </Grid>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>

1 голос
/ 28 апреля 2020

Я могу ошибаться, но когда вы инициализируете объект Rows, вы должны обновить itemsSource представления списка.

public void CreateGrid()
{
    Rows = new ObservableCollection<Row>();
    Rows.Clear();
    // Rows is initialized as a new collection so update the itemssource
    listViewm.ItemsSource = Rows;

    foreach(var entry in entryList) 
    { 
        // entryList just contains values I use to populate row info 
        var row = new Row();
        row.Name = entry.name;
        row.Age = entry.age;
        row.DOB = entry.dob;

        Rows.Add(row);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...