2017-07-15 63 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

我希望這可以幫到你。