ListView保持ListViewHeaderItem在顶部

时间:2016-08-11 20:51:08

标签: c# xaml listview header uwp

我首先解释一下我想要实现的目标:

The Letter" A"是Listview中的一个ListViewHeaderItem。没有滚动,List的顶部看起来像这样。

My ListView without scrolling

在我滚动ListViewHeaderItem" A"与其他物品一起向下移动 - 但是我怎么能实现Header作为第一项的最佳状态,直到#34; B"与ist子项目即将到来?我想要实现的行为的一个例子是官方" Mail"适用于Windows 10的Microsoft应用程序。它将日期时间保持在最前面,直到一天前写完的电子邮件到来。

我不知道这个问题是否已经存在,但我不知道它是如何被调用的,我也不知道谷歌会做些什么。

1 个答案:

答案 0 :(得分:3)

根据你的描述,我认为你想要的是一个分组的ListView。这里的关键点是使用CollectionViewSource作为ItemsSource并设置GroupStyle来指定组的显示方式。以下是一个简单的示例:

在XAML中

<Page.Resources>
    <CollectionViewSource x:Name="groupInfoCVS" IsSourceGrouped="True" />
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ListView ItemsSource="{Binding Source={StaticResource groupInfoCVS}}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Margin="15" Text="{Binding Path=Text}" />
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <Grid Background="LightGray">
                            <TextBlock Margin="10" Foreground="Black" Text="{Binding Key}" />
                        </Grid>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListView.GroupStyle>
    </ListView>
</Grid>

代码隐藏

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        List<TestDemo> list = new List<TestDemo>();

        for (int i = 0; i < 6; i++)
        {
            list.Add(new TestDemo { Key = "A", Text = $"Test A {i}" });
            list.Add(new TestDemo { Key = "B", Text = $"Test B {i}" });
        }

        var result = from t in list group t by t.Key;
        groupInfoCVS.Source = result;
    }
}

public class TestDemo
{
    public string Key { get; set; }
    public string Text { get; set; }
}

它看起来像:
enter image description here

有关详细信息,请参阅GitHub上How to group items in a list or grid (XAML)中的ListView and GridView sample简单列表视图示例