C# Xamarin表单:按日期分组listview
我希望能够在按日期分组的列表视图中显示事件列表 列表中的项目已经包含了时间,所以每个组的标题应该只是日期 解决此问题的一种方法是将模型DateTime转换为格式为“yyyy/MM/dd”的字符串,并为组指定此标题。但我想向用户显示“18/02-2017” 此外,如果是今天,我希望它有组名“今天”C# Xamarin表单:按日期分组listview,c#,listview,xamarin.forms,C#,Listview,Xamarin.forms,我希望能够在按日期分组的列表视图中显示事件列表 列表中的项目已经包含了时间,所以每个组的标题应该只是日期 解决此问题的一种方法是将模型DateTime转换为格式为“yyyy/MM/dd”的字符串,并为组指定此标题。但我想向用户显示“18/02-2017” 此外,如果是今天,我希望它有组名“今天” 我不知道如何实现这一点。詹姆斯·蒙特马诺(James Montemagno)有一篇关于在列表视图中分组的精彩教程,位于: 在您的案例中,您可以使用他在教程中所讨论的内容,并向您的模型添加一个特殊的只读
我不知道如何实现这一点。詹姆斯·蒙特马诺(James Montemagno)有一篇关于在列表视图中分组的精彩教程,位于: 在您的案例中,您可以使用他在教程中所讨论的内容,并向您的模型添加一个特殊的只读属性。该属性返回所需格式的字符串,如果当前日期与日期字段匹配,则返回“Today”。然后可以使用该字段分组。可以对“实际日期”属性进行排序,该属性应将“今天”放在列表的顶部
public string GroupDate
{
get
{
if(YourDateProperty.Date == DateTime.Now.Date)
return "Today";
else
return YourDateProperty.ToString("dd/MM-yyyy");
}
}
James Montemagno有一个关于在列表视图中分组的不错的教程,网址是: 在您的案例中,您可以使用他在教程中所讨论的内容,并向您的模型添加一个特殊的只读属性。该属性返回所需格式的字符串,如果当前日期与日期字段匹配,则返回“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>
这就是结果:
我希望这能对您有所帮助。在我看来,最简单的方法是使用自定义转换器:
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>
这就是结果:
我希望这能帮助你