过滤
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集合:
- 创建一个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
- 一个商业模式示例:
公共类事件{公共字符串内容{获取;设置;}公共字符串日期{获取;设置;}公共字符串类别{获取;设置;}}
- 使用OneWayToSource绑定模式,将该属性绑定到RadListView的FilterDescriptors属性:
.使用实例
这是它的样子:
可绑定过滤器描述符示例可以在我们的浏览器应用程序列表视图/ BindableCollections文件夹。