2016-01-18 5 views
0

У меня есть ListView с группировкой. Я хочу отображать элементы в этом ListView в соответствии с текстом, введенным в TextBox. Существует много учебников по фильтрации ListView и CollectionViewSource, но они предназначены для WPF не UWP. Что я делаю:UWP - Фильтрация ListView с группировкой

Мои ListView:

<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> 

Мой CollectionViewSource определяется в Page.Resources:

<CollectionViewSource x:Name="ContactsViewSource" 
         x:Key="src" 
         IsSourceGrouped="True" /> 

Я создал обработчик по textChanged событий для TextBox:

private void SearchBox_TextChanged(object sender, TextChangedEventArgs e) { 
    .... 
    //here I filter ListView items and add them to CollectionViewSource 
    ContactsViewSource.Source = filteredValues; 
} 

Но нет изменение. ListView не обновляется. Я не знаю, что делать. Я не смог найти решение этой проблемы для UWP.

При назначении данных в MainPageconstructor отображается информация. Когда я не назначу данные в constructor, но в SearchBox_TextChanged в ListView нет данных.

ответ

4

Примечание: x:Bind Поведение пользователя по умолчанию - OneTime! Таким образом, он не будет отслеживать дальнейшие изменения.

Добавить x:Bind ContactsViewSource.View, Mode=OneWay, чтобы убедиться, что это отслеживание изменений.

Кроме того, я предпочел бы добавить источник в CollectionViewSource в XAML как

<CollectionViewSource x:Name="ContactsViewSource" 
         x:Key="src" 
         Source="{x:Bind FilterdValues, Mode=OneWay}" 
         IsSourceGrouped="True" /> 

И добавить, что в качестве свойства и пусть код наследует от INotifyPropertyChanged, так что вы можете изменить, что FilterValues ​​в коде вместо всегда переназначение ContactViewSource.Source в коде ...

-1

Попробуйте использовать привязку вместо x: привязка.

Смежные вопросы