.NET MAUI列表视图过滤
ListView提供了在运行时以编程方式过滤其数据的功能。控件中实现filter接口的筛选器描述符可以实现这一点RadListView。过滤器Descriptors
收集。你可以使用我们的DelegateFilterDescriptor
实现。
DelegateFilterDescriptor
的DelegateFilterDescriptor
属性支持过滤器
,它定义了用于检查数据项是否通过筛选器的函数。
首先,在XAML中定义ListView:
添加一个
DelegateFilterDescriptor
到FilerDescriptors
ListView实例的集合:listView.FilterDescriptors。添加(新的telerik . xamarinforms . datacontrolls . listview . delegatefilterdescriptor {Filter = this。AgeFilter});
这是
AgeFilter
方法,其中包含过滤逻辑:private bool AgeFilter(对象参数){var age =((项目)参数).Age;返回年龄>= 25 &&年龄<= 35;}
定义
视图模型
类:公共类ViewModel{公共ViewModel() {this。Items = GetData();} public ObservableCollection
Items {get;设置;} private static ObservableCollection GetData() {var items = new ObservableCollection ();物品。添加(新的人{名字=“汤姆”,年龄= 41});物品。添加(new Person {Name = "Anna", Age = 32});物品。添加(新人{姓名= "Peter",年龄= 28}); items.Add(new Person { Name = "Teodor", Age = 39 }); items.Add(new Person { Name = "Lorenzo", Age = 25 }); items.Add(new Person { Name = "Andrea", Age = 33 }); items.Add(new Person { Name = "Martin", Age = 36 }); items.Add(new Person { Name = "Alexander", Age = 29 }); items.Add(new Person { Name = "Maria", Age = 22 }); items.Add(new Person { Name = "Elena", Age = 27 }); items.Add(new Person { Name = "Stefano", Age = 44 }); items.Add(new Person { Name = "Jake", Age = 31 }); items.Add(new Person { Name = "Leon", Age = 28 }); return items; } } 设置
人
数据类:公开类Person{公开字符串Name {get;设置;}公共int年龄{获取;设置;}}
数据过滤后的结果如下图所示:
绑定FilterDescriptors
的FilerDescriptors
集合的ListView支持绑定,这意味着您可以直接从视图模型
.
为了控制FilterDescriptor
通过MVVM收集:
创建type属性
ObservableCollection < FilterDescriptorBase >
在你的视图模型
,其中将包含所需的过滤器。public ObservableCollection
FilterDescriptors {get{返回this.filterDescriptors;}设置{this。UpdateValue (ref。filterDescriptors值);}} 使用
OneWayToSource
绑定模式将该属性绑定到FilterDescriptors
ListView的属性。为了演示目的,这个ListView使用了相同的方法视图模型
如上例所示:的排序描述符中添加排序描述符
FilerDescriptors
在视图模型
:private void UpdateExistingFilterDescriptor() {if(此。FilterDescriptors == null)返回;如果(this.FilterDescriptors。Count == 0) {this.FilterDescriptors. Count == 0)Add(new DelegateFilterDescriptor() {Filter = new Func
如下图所示: