【问题标题】:Grouped Listview windows-phone分组列表视图 windows-phone
【发布时间】:2016-05-14 09:11:15
【问题描述】:

我正在尝试显示基于此类的分组列表视图

private class EInfo
{
    public double JD { get; set; }
    public string Date { get; set; }
    public string Time { get; set; }
    public string Details { get; set; }
    public string MoreDetails { get; set; }
    public string Icon { get; set; }
}

private List<EInfo> MEphemeries = new List<EInfo>();

这就是我对每个组中的所有元素进行分组和排序的方式:

IEnumerable<IGrouping<string, EInfo>> query = MEphemeries.GroupBy(pet => pet.Details);

foreach (var group in query)
{
    Debug.WriteLine("Group {0}", group.Key);
    group.OrderBy(a => a.JD);
    foreach (var user in group)
    {
        Debug.WriteLine("  {0}", user.Date);
    }
}

listviewME.ItemsSource = query;

这里是 XAML:

<SemanticZoom Grid.Row="1" Background="Black" x:Name="semanticZoom" >
    <SemanticZoom.ZoomedInView>
        <ListView x:Name="listviewME" IncrementalLoadingThreshold="15">
            <!--<ListView.SemanticZoomOwner>
                <SemanticZoom/>
            </ListView.SemanticZoomOwner>-->
            <ListView.Header>
                <!-- table header-->
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition x:Name="listviewMEHeader0" Width="140"/>
                        <ColumnDefinition x:Name="listviewMEHeader1" Width="60"/>
                        <ColumnDefinition x:Name="listviewMEHeader2" Width="*"/>
                    </Grid.ColumnDefinitions>

                    <Grid Grid.Column="0" Background="{StaticResource MediumGreyThemeColor}" Margin="0, 0.5, 0, 0.5">                                                  
                    </Grid>
                    <Grid Grid.Column="1" Background="{StaticResource MediumGreyThemeColor}" Margin="0, 0.5, 0, 0.5">                                                  
                    </Grid>
                    <Grid Grid.Column="2" Background="{StaticResource MediumGreyThemeColor}" Margin="0, 0.5, 0, 0.5">                                                   
                    </Grid>
                </Grid>
            </ListView.Header>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid Background="Black" Margin="0,0,0,0">

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="140"/>
                            <ColumnDefinition Width="60"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>

                        <Grid Grid.Column="0" Background="{StaticResource DarkGreyThemeColor}" Margin="0, 0, 0, 0.5">
                            <StackPanel>
                                <TextBlock Text="{Binding Date}" Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource FlyoutPickerTitleTextBlockStyle}"/>
                                <TextBlock Text="{Binding Time}" Margin="5,0,5,5" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource BaseTextBlockStyle}" FontSize="14" Foreground="{StaticResource LightGreyThemeColor}"/>
                            </StackPanel>
                        </Grid>
                        <Grid Grid.Column="1" Background="{StaticResource DarkGreyThemeColor}" Margin="0, 0, 0, 0.5">
                            <!--<Rectangle Height="25" Width="25" Margin="0" Fill="{StaticResource MoonThemeColor}" RadiusX="12.5" RadiusY="12.5" />
                            <Rectangle Height="35" Width="35" Margin="0" Stroke="{Binding Color}" StrokeThickness="2" RadiusX="17.5" RadiusY="17.75" />-->
                            <Image Height="30" Width="30" Margin="0" Source="{Binding Icon}" Stretch="Uniform" />
                        </Grid>
                        <Grid Grid.Column="2" Background="{StaticResource DarkGreyThemeColor}" Margin="0, 0, 0, 0.5" Width="{Binding ActualWidth, ElementName=listviewMEHeader2}">
                            <StackPanel>
                                <TextBlock  Text="{Binding Details}" Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource FlyoutPickerTitleTextBlockStyle}" Foreground="{StaticResource VeryLightGreyThemeColor}"/>
                                <TextBlock  Text="{Binding MoreDetails}" Margin="5,0,5,5" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource BaseTextBlockStyle}" FontSize="14" Foreground="{StaticResource LightGreyThemeColor}"/>
                            </StackPanel>
                        </Grid>

                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.GroupStyle>
                <GroupStyle HidesIfEmpty="True">
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <Border Grid.Column="0" Grid.ColumnSpan="3" MinWidth="400" BorderThickness="2" BorderBrush="Blue" Background="AliceBlue" Margin="0,10,5,0" CornerRadius="1">
                                <TextBlock Foreground="White" Text="{Binding Key}"
                                Margin="10,2,2,5" TextTrimming="WordEllipsis" TextWrapping="NoWrap"
                                FontWeight="SemiBold" FontSize="10" />
                            </Border> 
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                </GroupStyle>
            </ListView.GroupStyle>
        </ListView>
    </SemanticZoom.ZoomedInView>

    <SemanticZoom.ZoomedOutView>
        <ListView Margin="5" ItemsSource="{Binding query}" Background="White">

            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid Height="99" Margin="16">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>

                        <Border Background="{StaticResource MediumDarkGreyThemeColor}"  Width="200" Height="111">
                            <Grid>
                                <TextBlock Text="{Binding Group.Key}" Style="{ThemeResource SubheaderTextBlockStyle}" />                                
                            </Grid>
                        </Border>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>

        </ListView>
    </SemanticZoom.ZoomedOutView>

</SemanticZoom>

问题是所有信息都分组了 好的,每个组都有它的键,它的元素列表按日期正确排序,但是列表视图不显示任何信息。它只有一些空块(块数与组数相同)。

有什么问题?我该如何解决这个问题?

这是我得到的:

这就是我想要实现的目标:

提前谢谢你!

【问题讨论】:

    标签: c# listview windows-phone-8.1 windows-phone semantic-zoom


    【解决方案1】:

    我看到的一些东西可能会解决您的问题:

    1) 将您的 private class EInfo 更改为 public

    2) 你的第一个 ListView 没有设置 ItemsSource 而你的第二个 LiewView 设置为 ItemsSource="{Binding query}"

    3) 您可以使用CollectionViewSource 很好地对 ListView 和 GridView 进行分组,请参见此处:CollectionViewSource example

    4) 或者您可以手动将其分组到 AlphaKeyGroup 中,我在这里有一个工作示例:AlphaKeyGroup


    最后的想法是检查 GroupBy 代码的输出与调试器中的 CollectionViewSource 和 AlphaKeyGroup 是否匹配。

    【讨论】:

    • 一一回答你的观点:1-.该类位于 XAML/cs 的同一页面中,因此这不是问题。 2-。我在第一个列表视图中遇到问题(实际上,只有一个列表视图,但是在放大时显示一个,在缩小时显示另一个 -semanticzoom-),并且它在代码中定义了“ItemsSource”。请参阅我发布的代码:'listviewME.ItemsSource = query;'由于我不知道的原因,如果我在 XAML 中使用 'ItemsSource="{Binding query}"' 不会在列表视图中显示任何内容,所以我必须在代码中执行。
    • 对于第 3 点和第 4 点,我认为我的问题就在这里(这是我在调试输出窗口中得到的:'listviewME.IsGrouping: False Error: BindingExpression path error: 'Date' property not found on 'System.Linq.Lookup`2+Grouping[[Sy,(...)' 我试图在 listview 项目列表中显示的项目的每个项目的这个绑定错误。似乎它正在尝试获取来自 'IEnumerable> 查询 = MEphemeries.GroupBy(pet => pet.Details);' 的同一级别的日期、时间、图标信息
    • @ImanolZubiaurre 是的;我会看看 Microsoft 的 CollectionViewSource 示例。如果您的 {Binding query} 不起作用,那么您必须设置/绑定了不正确的 DataContext。我在上面两种方法都做了,效果很好。
    • 最后我从这个例子中得到了一个很好的解决方案:[基本链接]interact-sw.co.uk/iangblog/2014/07/15/phone-listview-grouping 不是完美的解决方案,也不是我想要的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2011-07-01
    • 2015-05-29
    • 1970-01-01
    相关资源
    最近更新 更多