过滤对象的 ObservableCollection C#

fan*_*dro 5 c# xamarin xamarin.forms

我想按 Xamarin Form 应用程序的名称过滤对象ObservableCollectionPerson目标是对其进行过滤ObservableCollection以仅显示其中的一部分。

这是我的 Person 对象类:

public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string Phone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试制作这样的过滤器:

private ObservableCollection<Person> personItems = new ObservableCollection<Person>();

public ObservableCollection<Person> PersonItems
{
    get { return personItems; }
    set { personItems = value; OnPropertyChanged(); }
}

public void FilterPerson(string filter)
{
    if (string.IsNullOrWhiteSpace(filter))
    {
        PersonItems = personItems;
    }
    else 
    {
        PersonItems = personItems.Where((person) => person. Name.ToLower().Contains(filter));
        // Error here
    }
}
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

无法显式转换类型:“System.Collections.Generic.IEnumerable”到“System.Collections.ObjectModel.ObservableCollection”

Dim*_*tri 2

PersonItems = personItems.Where((person) => person. Name.ToLower().Contains(filter));
Run Code Online (Sandbox Code Playgroud)

返回 IEnumerable。

替换为PersonItems = new ObservableCollection<Person>(personItems.Where((person) => person.Name.ToLower().Contains(filter)));

您必须使用过滤后的结果重新创建可观察的结果。

  • 这完全违背了使用 ObservableCollection 的全部目的,即当事情发生变化时从中获取事件,以便 UI 可以对一组确切的变化做出反应。 (4认同)