【发布时间】:2017-12-20 10:05:21
【问题描述】:
我希望能够在按日期分组的列表视图中显示事件列表。
列表中的项目已经包含时间,所以每个组的标题应该只是日期。
解决此问题的一种方法是将模型 DateTime 转换为格式为“yyyy/MM/dd”的字符串,并为组指定此标题。但我想向用户显示“18/02-2017”。
如果是今天,我希望它具有组名“Today”。
我不知道如何实现这一点。
【问题讨论】:
标签: c# listview xamarin.forms
我希望能够在按日期分组的列表视图中显示事件列表。
列表中的项目已经包含时间,所以每个组的标题应该只是日期。
解决此问题的一种方法是将模型 DateTime 转换为格式为“yyyy/MM/dd”的字符串,并为组指定此标题。但我想向用户显示“18/02-2017”。
如果是今天,我希望它具有组名“Today”。
我不知道如何实现这一点。
【问题讨论】:
标签: c# listview xamarin.forms
James Montemagno 有一个很好的关于在 ListView 中分组的教程:
http://motzcod.es/post/94643411707/enhancing-xamarinforms-listview-with-grouping
在您的情况下,您可以使用他在教程中谈到的内容,并为您的模型添加一个特殊的只读属性。如果当前日期与日期字段匹配,则该属性返回所需格式的字符串或“今天”。然后,您可以使用该字段进行分组。可以在实际日期属性上进行排序,这应该将 Today 放在列表的顶部。
public string GroupDate
{
get
{
if(YourDateProperty.Date == DateTime.Now.Date)
return "Today";
else
return YourDateProperty.ToString("dd/MM-yyyy");
}
}
【讨论】:
在我看来,最简单的方法是使用自定义转换器:
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>
结果如下:
希望对你有帮助。
【讨论】: