动态将行添加到ListView中的网格

时间:2020-04-28 13:20:14

标签: c# xaml listview xamarin.forms

我有以下db.Exec("UPDATE counter_table SET counter = counter + 1 WHERE id = ?", 42)-

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>

itemSource没有绑定,因此没有新的行被创建,我尝试在XAML中删除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); } } ,并在后面的代码中使用ItemsSource="{ Binding Rows }",但是这也没有用。

因此,如果listViewm.ItemsSource = Rows有3个针对John,Bob和Bill的测试条目,则表应类似于-

entryList

2 个答案:

答案 0 :(得分:2)

您没有将您的值添加到列表视图。

<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 :(得分:1)

我可能是错的,但是当您初始化Rows对象时,应该更新listview的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);
    }
}
相关问题