2016-09-09 2 views
0

Я сделал список в своем приложении, и я хочу добавить к нему поисковую панель. Я перешел на многие форумы, но cnt получал это. Я должен использовать AutoSuggestBox, но не получим правильный метод. Вот мой код надеюсь, кто-то может помочь над ним ..autosuggestbox для элементов списка просмотра

<Grid> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <StackPanel Orientation="Horizontal" Grid.Column="1" Padding="15,0,0,0"> 
      <AutoSuggestBox PlaceholderText="Search" TextChanged="autosuggesttextchanged" QuerySubmitted="autosuggestquerysubmitted" SuggestionChosen="autosuggestsuggestionchosen"/> 
     </StackPanel> 

     <ListView x:Name="list" ItemsSource="{Binding Source={StaticResource herolistview}}" ItemClick="itemclicked" IsItemClickEnabled="True" Margin="5,0,0,0" Grid.Row="1" Grid.ColumnSpan="2"> 

      <ListView.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <StackPanel Orientation="Horizontal" Padding="0,4"> 
          <Image Height="50" Width="88" Source="{Binding image}"></Image> 
          <TextBlock Text="{Binding name}" HorizontalAlignment="Center" Foreground="White" Padding="8,0,0,0"></TextBlock> 
         </StackPanel> 
        </Grid> 
       </DataTemplate> 
      </ListView.ItemTemplate> 

      <ListView.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.HeaderTemplate> 
         <DataTemplate> 
          <TextBlock Text='{Binding key}' FontWeight="Bold" FontSize="20"/> 
         </DataTemplate> 
        </GroupStyle.HeaderTemplate> 
        <GroupStyle.Panel> 
         <ItemsPanelTemplate> 
          <VariableSizedWrapGrid MaximumRowsOrColumns="2"/> 
         </ItemsPanelTemplate> 
        </GroupStyle.Panel> 
       </GroupStyle> 
      </ListView.GroupStyle> 

     </ListView> 

    </Grid> 
</Grid> 

.cs файл

public sealed partial class MainPage : Page 
{ 
    ObservableCollection<mainpageclass> hlist = new ObservableCollection<mainpageclass>(); 


    public MainPage() 
    { 
     this.InitializeComponent(); 
     Filldata(); 
    } 
    void Filldata() 
    { 
     hlist.Add(new mainpageclass { name = "Aba" }); 
     hlist.Add(new mainpageclass { name = "Al" }); 
     hlist.Add(new mainpageclass { name = "Anon" }); 
     hlist.Add(new mainpageclass { name = "An"}); 
     hlist.Add(new mainpageclass { name = "Aren" }); 
     hlist.Add(new mainpageclass { name = "Boe"}); 
     list.ItemsSource = hlist; 
    } 

    private void autosuggesttextchanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) 
    { 
     if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) 
     { 

     } 
    } 

    private void autosuggestquerysubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) 
    { 

    } 

    private void autosuggestsuggestionchosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args) 
    { 

    } 
    } 
} 
+0

Я не могу проверить ваш код прямо сейчас. Попробуйте написать код внутри метода autosuggesttextchanged, выполнив поиск внутри hlist ObservableCollection. Эта коллекция является источником данных вашего ListView, поэтому, если вы фильтруете LINQ, ListView обновляет себя с новым контентом. –

ответ

1

Попробуйте этот код:

private void autosuggesttextchanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) 
    { 
     if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) 
     { 
      var filtered = hlist.Where(i => i.name.Contains(this.box.Text)).ToList(); 
      list.ItemsSource = filtered; 
     } 
    } 

Пожалуйста, обратите внимание, что мне нужно, чтобы установить имя AutoSuggestBox (x: Name = "box"). Обратите внимание, что XAML: ItemsSource = "{Binding Source = {StaticResource herolistview}}" бесполезен, потому что из-за кода вы перезаписываете свойство ItemsSource! :-)

+0

хотя он работал, но в нем есть проблема, когда я печатаю письмо в списке autosuggestbox, обновляется с введенной буквой, но она не обновляется в соответствии с первой буквой, например, если я набираю 'f', тогда listview не обновляется с помощью элементы, начинающиеся с 'f', вместо этого с элементами, в которых есть буква «f» во всем элементе. Я не могу направить лишнее слово, начиная с «f» – Ravi

+0

, он работал на моем телефоне должным образом. thnx человек. Я думаю, что мне нужно удалить приложение на ПК, а затем развернуть на нем. – Ravi

+0

проблема есть в случае с буквой .. – Ravi

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