为什么gridview像有数据一样展开,但不显示数据?

Why does gridview expand like it has the data, but doesn't display the data?

数据很好,我可以在列表框中成功显示数据,但是当我尝试在网格视图或列表视图中执行此操作时,我得到了这些结果。我觉得这里少了点小东西。

我已经设置了两种方式,并更新了文本框上的 属性 来源,但仍然没有显示可见数据。我知道它有数据,因为它像 I captured in this screenshot 一样展开。

LeadingCauseOfDeathClass

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));
    }

}

GridView 放在 StackPanel 中是个坏主意。 StackPanel 将根据需要展开以适应整个内容。因此,GridView 所做的自动虚拟化会丢失,因为它会拉伸以适应所有项目。

当您的 ItemsWrapGrid 的方向设置为垂直时,它可能根本不会扩展...它需要一个固定的高度来填充项目并在水平方向扩展。

使用具有两个 RowDefinition 的网格...第一个设置为自动,第二个设置为 *