.Net毛伊岛应用程序。我想要一个SearchBar
,用户可以在其中输入搜索文本和ListView或任何其他具有ItemsSource
的视图,以便通过过滤掉任何不匹配的项目来立即做出反应。我不想每次用户在搜索栏中更改一个符号时都重新创建ObservableCollection项目,因为它会为筛选后的项目列表重新分配内存,并且列表可能很长。
我发现了syncfuntion列表控件是如何处理的:https://help.syncfusion.com/maui/listview/filtering.在那里应用过滤器";"在逃";到列表中的每个项目,同时将其绑定到View
的ItemsSource
,因此不会为搜索参数创建新的集合,使用相同的集合,但"上有不同的参数;每个项目";基地。如果您将IEnumerable
与自定义Where
语句一起使用,您可以获得类似的效果,但随后您就失去了集合";可观察";。关于如何在没有syncfusion的listview控制的情况下解决这个问题,有什么想法吗?
"过滤器";通过将ItemTemplate
的视图的IsVisible
绑定到您设置的布尔。
<ListView.ItemTemplate>
<DataTemplate>
<SomeLayoutOrViewHere IsVisible="{Binding Show}" ...
...
public ObservableCollection<MyItem> MyItems ...
void ApplyFilter(...)
{
foreach (MyItem item in MyItems)
{
item.Show = ...;
}
}
public class MyItem : ObservableObject
{
public bool Show { get => show; set => SetProperty(ref show, value); }
private bool show;
...
}