Xamarin表单:按日期分组列表视图

时间:2017-07-15 11:26:54

标签: c# listview xamarin.forms

我希望能够在按日期分组的列表视图中显示事件列表。

列表中的项目已经包含时间,因此每个组的标题应该只是日期。

解决此问题的一种方法是将模型DateTime转换为格式为" yyyy / MM / dd"并给予该组这个称号。但我想展示" 18 / 02-2017"给用户。

此外,如果是今天我希望它有一个团体名称"今天"。

我无法弄清楚如何实现这一目标。

2 个答案:

答案 0 :(得分:0)

詹姆斯·蒙特马尼奥(James Montemagno)有一个很好的关于ListView分组的教程:

http://motzcod.es/post/94643411707/enhancing-xamarinforms-listview-with-grouping

在你的情况下,你可以在他的教程中使用他所说的内容,并为你的模型添加一个特殊的readonly属性。如果当前日期与日期字段匹配,该属性将返回所需格式的字符串或“今天”。然后,您可以使用该字段进行分组。可以在实际日期属性上进行排序,这应该将今天放在列表的顶部。

public string GroupDate
{
    get 
    {
        if(YourDateProperty.Date == DateTime.Now.Date)
            return "Today";
        else
            return YourDateProperty.ToString("dd/MM-yyyy");
    }
}

答案 1 :(得分:0)

从我的观点来看,简单的方法是使用自定义转换器:

class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime date = (DateTime)value;
        if (date.Equals(DateTime.Today))
        {
            return "Today";
        }
        return date.Day.ToString().PadLeft(2,'0') + @"/" + date.Month.ToString().PadLeft(2, '0') + "-" + date.Year;
    }
}

使用此转换器,如果值为今天,则为“今天”,以及格式为dd / MM-yyyy的日期

您可以像这样使用转换器:

<ContentPage.Resources>
    <ResourceDictionary>
        <local:DateConverter x:Key="DateConverter" />
    </ResourceDictionary>
</ContentPage.Resources>
<StackLayout>
    <ListView
        GroupDisplayBinding="{Binding Date, Converter={StaticResource DateConverter}}"
        IsGroupingEnabled="True"
        ItemsSource="{Binding Events}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding Name}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackLayout>

这就是结果:

ListView grouped

我希望这可以帮到你。