我希望能够在按日期分组的列表视图中显示事件列表。
列表中的项目已经包含时间,因此每个组的标题应该只是日期。
解决此问题的一种方法是将模型DateTime转换为格式为" yyyy / MM / dd"并给予该组这个称号。但我想展示" 18 / 02-2017"给用户。
此外,如果是今天我希望它有一个团体名称"今天"。
我无法弄清楚如何实现这一目标。
答案 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>
这就是结果:
我希望这可以帮到你。