Почему gridview расширяется, как будто оно содержит данные, но не отображает данные? - PullRequest
1 голос
/ 11 марта 2019

Данные поступают нормально, и я могу успешно отобразить данные в списке, но когда я пытаюсь сделать это в виде сетки или списка, я получаю эти результаты.Я чувствую, что чего-то маленького здесь не хватает.

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

LeadingCauseOfDeath Class

public class LeadingCausesOfDeath : BasePropertyHandler
{
    public int Year { get; set; }
    public string _113_cause_name { get;set;}
    public string Cause_name { get; set; }
    public string State { get; set; }
    public int Deaths { get; set; }
    public int AgeAdjustedDeathRate { get; set; }

}

Просмотр XAML

<Grid DataContext="{Binding Source={StaticResource HomePageVM}}">
    <StackPanel >
        <NavigationView PaneDisplayMode="Top" IsBackButtonVisible="Collapsed" >
            <NavigationView.MenuItems>
                <NavigationViewItem Content="Family"/>
                <NavigationViewItem Content="History"/>
                <NavigationViewItem Content="About"/>
            </NavigationView.MenuItems>
        </NavigationView>

        <GridView ItemsSource="{Binding Data, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                  IsItemClickEnabled="True"
              IsSwipeEnabled="true"
              SelectionMode="Single"
                  BorderThickness="10" BorderBrush="Blue">

            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <ItemsWrapGrid MaximumRowsOrColumns="4" Orientation="Vertical"/>
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>

            <GridView.ItemTemplate>
                <DataTemplate>
                    <Grid  BorderBrush="Black" BorderThickness="10">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="auto"/>
                            <ColumnDefinition Width="auto"/>
                            <ColumnDefinition Width="auto"/>
                            <ColumnDefinition Width="auto"/>
                        </Grid.ColumnDefinitions>

                        <TextBlock Grid.Column="0" Text="{Binding Cause_name}" />
                        <TextBlock Grid.Column="1" Text="{Binding Year}" />
                        <TextBlock Grid.Column="2" Text="{Binding Deaths}" />
                        <TextBlock Grid.Column="3" Text="{Binding State}" />
                    </Grid>
                </DataTemplate>
            </GridView.ItemTemplate>

        </GridView>
    </StackPanel>
</Grid>

Просмотр модели

 private ObservableCollection<LeadingCausesOfDeath> _data;

    public ObservableCollection<LeadingCausesOfDeath> Data
    {
        get
        {
            return _data;
        }
        set
        {
            _data = value;
            OnPropertyChanged("Data");
        }
    }
    public HomePageVM()
    {
        GetData();
    }

    private async void GetData()
    {
        var service = new ServiceForApi();
        Data = new ObservableCollection<LeadingCausesOfDeath>();
        Data = await service.GetFDAStuff();
        OnPropertyChanged("Data");
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged( string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

}

1 Ответ

2 голосов
/ 12 марта 2019

Помещение GridView внутрь StackPanel - плохая идея.StackPanel будет расширяться настолько, насколько это необходимо для размещения всего содержимого.Таким образом, автоматическая виртуализация, которую делает GridView, теряется, потому что она растягивается, чтобы соответствовать всем элементам.

Если для вашей ориентации ItemsWrapGrid установлено значение Вертикальная, она, вероятно, вообще не расширяется ... она ожидает, что фиксированная высота будет заполняться элементами, и будет расширяться в горизонтальном направлении.

Использовать сетку с двумя RowDefinitions ... первый установлен на Авто, второй на *

...