2016-08-02 95 views
1

我想获取包含搜索文本的项目。 Lisview应该使用movieTitle在列表视图中向我显示包含搜索文本的项目(文本)。 我有这个电网:如何选择包含文本框的项目。从文本框搜索到ListView

<Grid x:Name="GridSearchMovie" Grid.Row="2" Visibility="Hidden" Background="White"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="25"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <TextBox x:Name="txtSearchMovie" TextChanged="txtSearch_TextChanged"/> 
     <ListView x:Name="lvSearchMovie" Grid.Row="1"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <WrapPanel> 
         <TextBlock Text="{Binding movieTitle}"/> 
        </WrapPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="Height" Value="50"/> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 
    </Grid> 

我在文本框中键入一个单词和Lisview显示我其中包含Textbox.Text的项目。下面是搜索代码:

lvSearchMovie.ItemsSource = Movies; 

      TextBox t = (TextBox)sender; 
      string Filter = txtSearchMovie.Text; 
      ICollectionView cv = CollectionViewSource.GetDefaultView(lvMovies.ItemsSource); 
      cv.Filter = o => 
       { 
        Movie m = o as Movie; 
        return (m.movieTitle.ToUpper().Contains(Filter.ToUpper()) || 
         m.movieDirector.ToUpper().Contains(Filter.ToUpper()) || 
         m.movieActor.ToUpper().Contains(Filter.ToUpper()) || 
         m.movieGenre.ToUpper().Contains(Filter.ToUpper()) || 
         m.movieTime.ToString().ToUpper().Contains(Filter.ToUpper()) || 
         m.movieDate.ToString().ToUpper().Contains(Filter.ToUpper()) || 
         m.movieStudio.ToUpper().Contains(Filter.ToUpper()) || 
         m.movieFSK.ToUpper().Contains(Filter.ToUpper()) || 
         m.movieRating.ToUpper().Contains(Filter.ToUpper()) || 
         m.movieSeenTo.ToUpper().Contains(Filter.ToUpper())); 
       }; 

我想一个文本块添加到ListView项WrapPanel,这显示了包含文字。我如何得到这些包含Textbox.Text的单词?

电影类:

public class Movie 
{ 
    public int movieID; 
    public string moviePicture; 
    public string movieTitle {get; set;} 
    public string movieDirector; 
    public string movieActor; 
    public string movieGenre; 
    public string movieTime; 
    public string movieDate; 
    public string movieStudio; 
    public string movieFSK; 
    public string movieRating; 
} 

列表电影:

List<Movie> Movies = new List<Movie>(); 
+0

是什么电影? –

+0

这是一个列表与电影对象 – MMbach

+0

它是一个可观察的集合? –

回答

1

OK第一步是到您的列表变成可观察到的集合作为列表将不会更新您的UI。试试这个:

ObservableCollection<Movie> Movies = new ObservableCollection<Movie>(); 

现在只需将此添加到您想要的任何事件。

  foreach (var item in cv) 
      { 
       if (cv.Any(x => m.movieTitle.ToUpper() == Filter.ToUpper() ) 
       { item.movieTitle = txtSearchMovie.Text;} 
       if (cv.Any(x => m.movieDirector.ToUpper() == Filter.ToUpper() ) 
       { item.movieDirector = txtSearchMovie.Text;} 
       if (cv.Any(x => m.movieActor.ToUpper() == Filter.ToUpper() ) 
       { item.movieActor = txtSearchMovie.Text;} 
       if (cv.Any(x => m.movieGenre.ToUpper() == Filter.ToUpper() ) 
       { item.movieGenre = txtSearchMovie.Text;} 
       Movies.Add(item); 
      } 
+0

而我如何得到包含搜索文本的“单词”? – MMbach

+0

我需要看到你的电影课程代码和电影,因为我不知道你是如何植入课程的。 –

+0

已更新帖子 – MMbach