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

问题描述 投票:1回答:1

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

我设置了双向,并更新了文本框中的属性源,但仍然没有显示可见数据。我知道它有数据,因为它像I captured in this screenshot一样扩展。

LeadingCauseOfDeath类

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

}
c# xaml uwp windows-10-universal
1个回答
2
投票

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

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

使用具有两个RowDefinitions的Grid ...首先设置为Auto,第二个设置为*

© www.soinside.com 2019 - 2024. All rights reserved.