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

过滤

RadListView为您提供在运行时以编程方式过滤其数据的功能。控件中实现filter接口的筛选器描述符可以实现这一点RadListView。过滤器Descriptors收集。你可以使用我们的DelegateFilterDescriptor实现。

DelegateFilterDescriptor

  • 过滤器:定义用于检查数据项是否通过筛选的函数。

例子

首先,在XAML中定义ListView:

           < / telerikDataControls: RadListView >

将以下代码添加到Filtering类中:

public Filtering() {InitializeComponent();这一点。BindingContext = new ViewModel();listView.FilterDescriptors。添加(新的telerik . xamarinforms . datacontrolls . listview . delegatefilterdescriptor {Filter = this。AgeFilter});} private bool AgeFilter(对象参数){var age =((项目)参数).Age;返回年龄>= 25 &&年龄<= 35;}

下面是ViewModel类:

公共类ViewModel{公共ViewModel() {this。Items = GetData();} public ObservableCollection Items {get;设置;} private static ObservableCollection GetData() {var items = new ObservableCollection();物品。Add(new Item {Name = "Tom", Age = 41});物品。添加(new Item {Name = "Anna", Age = 32});物品。添加(new Item {Name = "Peter", Age = 28}); items.Add(new Item { Name = "Teodor", Age = 39}); items.Add(new Item { Name = "Lorenzo", Age = 25 }); items.Add(new Item { Name = "Andrea", Age = 33}); items.Add(new Item { Name = "Martin", Age = 36 }); items.Add(new Item { Name = "Alexander", Age = 29}); items.Add(new Item { Name = "Maria", Age = 22 }); items.Add(new Item { Name = "Elena", Age = 27 }); items.Add(new Item { Name = "Stefano", Age = 44 }); items.Add(new Item { Name = "Jake", Age = 31 }); items.Add(new Item { Name = "Leon", Age = 28 }); return items; } }

这里是数据类:

公共类项目{公共字符串名称{获取;设置;}公共int年龄{获取;设置;}}

以下是数据过滤后的结果:

过滤

的ListView/Features文件夹中可以找到如何使用FilterDescriptor创建ListView的示例浏览器应用程序

绑定FilterDescriptor

RadListView控件支持绑定。现在的新功能是用户可以通过MVVM控制FilerDescriptor集合。

为了通过MVVM控制FilterDescriptor集合:

  1. 创建一个ObservableCollection类型的属性 在ViewModel中,它将包含所需的过滤器。下面是一个示例ViewModel:
公共类ViewModel: INotifyPropertyChanged {private ObservableCollection filterDescriptors;private bool isFilterSwitchToggled;private List<事件>项;public ViewModel() {this。Items = this.GetItems();这一点。filterDescriptors = new ObservableCollection();}公共事件PropertyChangedEventHandler PropertyChanged;public ObservableCollection FilterDescriptors {get{返回this.filterDescriptors;} set {if (this。filterDescriptors != value){这个。filterDescriptors = value; OnPropertyChanged(); } } } public bool IsFilterSwitchToggled { get { return this.isFilterSwitchToggled; } set { if (this.isFilterSwitchToggled != value) { this.isFilterSwitchToggled = value; OnPropertyChanged(); } } } public List Items { get { return this.items; } set { if (this.items != value) { this.items = value; OnPropertyChanged(); } } } private List GetItems() { var results = new List(); results.Add(new Event() { Content = "Content of the item", Day = "Tommorow", Category = "A" }); results.Add(new Event() { Content = "This also happens today", Day = "Yesterday", Category = "A" }); results.Add(new Event() { Content = "More events today", Day = "Today", Category = "A" }); results.Add(new Event() { Content = "Go shopping after 19:00", Day = "Yesterday", Category = "B" }); results.Add(new Event() { Content = "You are now free to do whathever", Day = "Today", Category = "B" }); results.Add(new Event() { Content = "For tommorow", Day = "Today", Category = "B" }); results.Add(new Event() { Content = "It is a free day", Day = "Yesterday", Category = "C" }); results.Add(new Event() { Content = "Go have some fun", Day = "Tommorow", Category = "C" }); results.Add(new Event() { Content = "Party", Day = "Tommorow", Category = "C" }); return results; } private void OnPropertyChanged([CallerMemberName] string propertyName = null) { this.UpdateExistingFilterDescriptor(propertyName); this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } private void UpdateExistingFilterDescriptor(string propertyName) { if (this.FilterDescriptors == null) return; if (this.FilterDescriptors.Count == 0) { this.FilterDescriptors.Add(new DelegateFilterDescriptor() { Filter = new Func((item) => ((Event)item).Category.Equals("A")) }); } if(propertyName.Equals(nameof(IsFilterSwitchToggled))) { ((DelegateFilterDescriptor)this.FilterDescriptors.FirstOrDefault()).Filter = this.isFilterSwitchToggled ? new Func((item) => ((Event)item).Category.Equals("C")) : new Func((item) => ((Event)item).Category.Equals("A")); } } }
  1. 一个商业模式示例:
公共类事件{公共字符串内容{获取;设置;}公共字符串日期{获取;设置;}公共字符串类别{获取;设置;}}
  1. 使用OneWayToSource绑定模式,将该属性绑定到RadListView的FilterDescriptors属性:
                       .使用实例

这是它的样子:

FilterDescriptorsMVVM

可绑定过滤器描述符示例可以在我们的浏览器应用程序列表视图/ BindableCollections文件夹。

另请参阅

在本文中
Baidu
map