我对Xamarin.Forms和WPF一般都很新。因此目前没有使用ViewModels,因为我刚刚阅读了有关MVVM的内容,并将在稍后进行更改。我希望现在这并没有多大区别。
我们希望在分组的ListView(Sketch can be found here)中实现AccordeonControl。 单击RaceEvent时,应展开比赛。
我已经实现了GroupedListView(没有accordeon),如下所示:
<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的类,所以我创建了一个泛型类:
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);
}
}
## 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