如何在GroupedListView中实现AccordeonControl? (Xamarin.Forms)

时间:2015-12-16 07:38:09

标签: c# wpf mvvm xamarin xamarin.forms

我对Xamarin.Forms和WPF一般都很新。因此目前没有使用ViewModels,因为我刚刚阅读了有关MVVM的内容,并将在稍后进行更改。我希望现在这并没有多大区别。

我们希望在分组的ListView(Sketch can be found here)中实现AccordeonControl。 单击RaceEvent时,应展开比赛。

我已经实现了GroupedListView(没有accordeon),如下所示:

ListView.xaml

<ListView>
  <ListView.GroupHeaderTemplate>
    <DataTemplate>
      <ViewCell>
        <ViewCell.Height>
          <OnPlatform x:TypeArguments="x:Double">
            <OnPlatform.iOS>
              32
            </OnPlatform.iOS>
          </OnPlatform>
        </ViewCell.Height>

        <Label Text="{Binding Path=Key,   StringFormat='{0:dd.MM.yyyy}'}"
           VerticalOptions="CenterAndExpand"
           YAlign="Center"
           XAlign="Center"
           FontSize="32"/>
      </ViewCell>
    </DataTemplate>
  </ListView.GroupHeaderTemplate>

  <ListView.ItemTemplate>
    <DataTemplate>
      <ViewCell>
        <ViewCell.View>
          <ContentView Padding="10,0,0,0">
            <Label Text="{Binding Name}"
               VerticalOptions="CenterAndExpand"
               YAlign="Center"
               FontSize="28"/>
          </ContentView>
        </ViewCell.View>
      </ViewCell>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>   

Grouped ListViews显然需要一个包含Key并继承自ObservableCollection的类,所以我创建了一个泛型类:

Grouping.cs

class Grouping<K, T> : ObservableCollection
{
   public K Key { get; set; }

   public Grouping(K key, IEnumerable<T> items)
   {
      Key = key;
      foreach (var item in items)
        this.Items.Add(item);
   }
}

在后面的代码中,我使用LINQ:

生成IEnumerable

##     private void UpdateListView(IEnumerable events)     {         Items.Clear();

    // Order events by dates and group by dates. The result is an      IEnumerable of type Grouping.
    var sorted = from raceEvent in events
                 orderby raceEvent.DateTime descending
                 group raceEvent by raceEvent.DateTime into grp
                 select new Grouping<DateTime, IRaceEvent>(grp.Key, grp);

    foreach (var item in sorted)
        Items.Add(item);
 }

如何扩展此代码?

提前致谢

Niklas Rammerstorfer

0 个答案:

没有答案