2017-07-15 68 views
0

我希望能够在按日期分组的列表视图中显示事件列表。Xamarin格式:按日期对列表视图进行分组

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

解决此问题的一种方法是将模型DateTime转换为格式为“yyyy/MM/dd”的字符串并将该标题赋予该组。但是我想给用户显示“18/02-2017”。

此外,如果是今天,我希望它有组名“今日”。

我不知道如何实现这一点。

回答

0

詹姆斯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"); 
    } 
} 
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

我希望这可以帮到你。