Listview UWP-分组过滤列表视图
我有一个带有分组的Listview UWP-分组过滤列表视图,listview,windows-10,uwp,collectionviewsource,Listview,Windows 10,Uwp,Collectionviewsource,我有一个带有分组的列表视图。我想根据输入到TextBox的文本显示此列表视图中的项目。有许多关于过滤列表视图和集合视图源的教程,但它们是针对WPF而不是UWP。我在做什么: 我的列表视图: <ListView x:Name="ContactsListView" ItemTemplate="{StaticResource ContactsTemplate}" ItemsSource="{x:Bind ContactsViewSo
列表视图。我想根据输入到TextBox
的文本显示此列表视图中的项目。有许多关于过滤列表视图
和集合视图源
的教程,但它们是针对WPF
而不是UWP
。我在做什么:
我的列表视图
:
<ListView x:Name="ContactsListView"
ItemTemplate="{StaticResource ContactsTemplate}"
ItemsSource="{x:Bind ContactsViewSource.View}"
SelectionMode="Single"
ShowsScrollingPlaceholders="True" >
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate x:DataType="data:GroupingItem">
<TextBlock Text="{x:Bind Key}"
Foreground="Blue"
Style="{ThemeResource TitleTextBlockStyle}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
我已经为TextBox
创建了textChanged
事件处理程序:
private void SearchBox_TextChanged(object sender, TextChangedEventArgs e) {
....
//here I filter ListView items and add them to CollectionViewSource
ContactsViewSource.Source = filteredValues;
}
但是没有变化。ListView未刷新。我不知道该怎么办。对于UWP
,我无法找到任何解决此问题的方法
在MainPage
constructor
中分配数据时,它会显示数据。当我没有在构造函数中分配数据时,但在搜索框中,文本已更改列表视图中没有显示数据时,请注意x:Bind
默认行为是OneTime
!
所以它不会跟踪任何进一步的变化
添加x:Bind contacts viewsource.View,Mode=OneWay
以确保跟踪更改
另外,我更愿意像这样在XAML中添加CollectionViewSource的源代码
<CollectionViewSource x:Name="ContactsViewSource"
x:Key="src"
Source="{x:Bind FilterdValues, Mode=OneWay}"
IsSourceGrouped="True" />
并将其作为属性添加,并让代码继承自INotifyPropertyChanged,这样您就可以在代码中更改该FilterValue,而不是始终重新分配ContactsViewSource.Source在代码中…请注意,x:Bind
默认行为是OneTime
!
所以它不会跟踪任何进一步的变化
添加x:Bind contacts viewsource.View,Mode=OneWay
以确保跟踪更改
另外,我更愿意像这样在XAML中添加CollectionViewSource的源代码
<CollectionViewSource x:Name="ContactsViewSource"
x:Key="src"
Source="{x:Bind FilterdValues, Mode=OneWay}"
IsSourceGrouped="True" />
并将其作为属性添加,让代码继承自INotifyPropertyChanged,这样您就可以在代码中更改该FilterValue,而不是始终重新分配ContactsViewSource.Source in code…您现在实现的解决方案不会利用ListView的内置动画-重置每次文本更改后,source将导致每次出现一个全新的列表
相反,您可以直接浏览ListView的ItemsSource,并在每次文本更改后删除/添加回项。使用此方法,单个项目将设置动画以消失和显示
最近在Windows Dev Docs上发表了一篇关于在UWP中过滤集合的文章。您现在实施的解决方案没有利用ListView的内置动画-每次文本更改后重置源代码将导致一个全新的列表每次出现
相反,您可以直接浏览ListView的ItemsSource,并在每次文本更改后删除/添加回项。使用此方法,单个项目将设置动画以消失和显示
最近在Windows开发文档上发表了一篇关于在UWP中过滤集合的文章。“注意,x:Bind默认行为是一次性的”
“-OMG!谢谢,最近搬到UWP后,我没有意识到这一点。谢谢-you@MickyD一定要把这个放在帽子里。这是所有元素源绑定的行为。@michaelg我会的,谢谢:)“注意,x:Bind的默认行为是OneTime
”-OMG!谢谢,最近搬到UWP后,我没有意识到这一点。谢谢-you@MickyD一定要把这个放在帽子里。这是所有元素源绑定的行为。@michaelg我会的,谢谢:)