Xamarin的Telerik UI?下载30天免费试用

分组

RadListView为您提供在运行时以编程方式对其数据进行分组的功能。属性的组描述符可以实现这一点RadListView。GroupDescriptors收集。

此外,该控件支持通过UI通过点击组标题或以编程方式展开和折叠组操作。有关这方面的更多详细信息,请参阅展开和折叠组

PropertyGroupDescriptor

可以根据定义项的类的属性值对数据进行分组。这个描述符公开了以下属性:

  • PropertyName:定义要分组的属性的字符串名称。
  • 排序方式:定义每个组的排序顺序为升序或降序。

例如,让我们有以下业务对象:

公共类城市{公共字符串名称{获取;设置;}公共字符串国家{获取;设置;}}

和一个包含Cities集合的ViewModel:

公共类ViewModel {public ObservableCollection Cities {get;设置;} public ViewModel() {this。城市城市= new ObservableCollection < >(){新城市(){Name =“巴塞罗那”,国家=“西班牙”},新城市(){Name =“马德里”,国家=“西班牙”},新城市(){Name =“罗马”,国家=“意大利”},新城市(){Name =“佛罗伦萨”,国家=“意大利”},新城市(){Name =“伦敦”,国家=“英格兰”},新城市(){Name =“曼彻斯特”,国家=“英格兰”},新城市(){Name =“纽约”,国家=“美国”},新城市(){Name =“波士顿”,国家= "美国"}};}}

下面的代码段演示了如何通过PropertyGroupDescriptor通过“国家”属性对城市进行分组:

    < / telerikDataControls: RadListView >

GroupHeaderTemplate

此外,您还可以创建自定义GroupHeaderTemplate还有ListViewItemTemplate以便在分组ListView时实现所需的外观。GroupHeader的BindingContext是一个复杂的对象,它包括以下属性:

  • 扩大:定义一个值,该值指示该组当前是否展开(使其子项可见)。
  • 项目:获取组的子项。
  • 关键:获取组键的特定值。
  • 水平:获取组的从零开始的级别(或深度)。

下面的代码段显示了如何GroupHeaderTemplate定义:

          <网格> <网格。ColumnDefinition >       

剩下的就是将ViewModel设置为控件的BindingContext:

列表视图。BindingContext = new ViewModel();

图1:通过PropertyGroupDescriptor分组的ListView

ListView分组

DelegateGroupDescriptor

这个描述符允许你根据一个自定义的键进行分组(例如组合了两个或多个属性的复杂表达式),而不是受限于单个属性的值。这个描述符公开了以下属性:

  • KeyExtractor:定义(Func <对象,对象)委托,该委托返回用于检索每个数据项的组键的属性。
  • 排序方式:定义每个组的排序顺序为升序或降序。

让我们使用上一节中的相同示例,只是通过代码添加了DelegateGroupDescriptor。

下面的代码片段显示了ListView实例是如何定义的:

  .

你可以创建并应用一个委托来对这些项进行分组(例如按它们的首字母分组),如下所示:

public DelegateGroupDescriptorGroups() {InitializeComponent();列表视图。BindingContext = new ViewModel();var delegateDescriptor = new DelegateGroupDescriptor {KeyExtractor = FirstLetterKeyExtractor};listView.GroupDescriptors.Add (delegateDescriptor);} private object FirstLetterKeyExtractor(object arg) {var item = arg as City;返回项目? . name。Substring (0,1);}

图2:通过DelegateGroupDescriptor分组的ListView

ListView分组

Sticky组头信息

从R1 2020 SP版本开始,RadListView提供了将其组头设置为粘性的选项。这意味着GroupHeader将在滚动项目时“冻结”,直到整个组都被滚动走。当您滚动下一个组时,当前粘贴的组标题将由下一个组标题推送。

要启用粘性组标题行为,只需设置IsGroupHeaderSticky属性的ListView到真正的.缺省情况下,IsGroupHeaderSticky值为False。

 . var listView = new RadListView();列表视图。IsGroupHeaderSticky = true;

检查下面的粘性组标题的作用:

ListView Sticky Group Headers

绑定GroupDescriptor

GroupDescriptor集合现在可以由用户使用MVVM控制。

为了通过MVVM控制GroupDescriptor集合:

  1. 创建一个ObservableCollection类型的属性 在ViewModel中包含所需的组描述符:

    public ObservableCollection GroupDescriptors {get{返回this.groupDescriptors;} set {if (this。groupDescriptors != value){此。groupDescriptors = value;OnPropertyChanged ();}}}
  2. 使用OneWayToSource绑定模式,将该属性绑定到RadListView的GroupDescriptors属性:
 . Row="2" GroupDescriptors="{绑定GroupDescriptors, Mode=OneWayToSource}" ItemsSource="{绑定项}"> .

下面是通过MVVM的GroupDescriptor集合的样子:

GroupDescriptorsMVVM

你可以找到一个工作演示标签可绑定的组描述符的ListView/Bindable Collections文件夹中浏览器应用程序

另请参阅

在本文中
Baidu
map