【问题标题】:Xamarin forms: Grouping a listview by dateXamarin 表单:按日期对列表视图进行分组
【发布时间】:2017-12-20 10:05:21
【问题描述】:

我希望能够在按日期分组的列表视图中显示事件列表。

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

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

如果是今天,我希望它具有组名“Today”。

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

【问题讨论】:

    标签: c# listview xamarin.forms


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在我看来,最简单的方法是使用自定义转换器:

      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>
      

      结果如下:

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2017-01-25
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 1970-01-01
        相关资源
        最近更新 更多