【问题标题】:How to Select the Item which contains the Textbox. Search from Textbox to ListView如何选择包含文本框的项目。从文本框搜索到 ListView
【发布时间】:2016-12-07 11:08:13
【问题描述】:

我想获取包含搜索文本的项目。 Lisview 应该在带有movieTitle 的列表视图中向我显示包含搜索文本的项目(文本)。 我有这个网格:

<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 Item WrapPanel 添加一个 Textblock,它显示包含 Word。我如何得到这些包含 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>();

【问题讨论】:

  • 这是一个包含电影对象的列表
  • 它是一个可观察的集合吗?
  • 好的,我注意到的第一个问题,列表没有实现 INotifyChange 接口,这意味着您的列表视图在更改时不会更新 UI。
  • 但它有效,我有一个 Refresh 方法可以实现 Itemssource,这不是问题

标签: c# wpf listview search


【解决方案1】:

好的第一步是将您的列表更改为可观察的集合,因为列表不会更新您的 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);
            }

【讨论】:

  • 我如何得到包含搜索文本的“单词”?
  • 我需要查看您的电影类代码和电影,因为我不知道您是如何植入这些类的。
  • 并且该项目是搜索文本所在的电影?是的,我也有。但我想把文字从手机里拿出来。如果流派包含搜索文本,我想显示流派(包含搜索文本的文本)。是你发的吗?
  • 我想要类似 windows 资源管理器的搜索,它显示包含搜索文本的黄色文本,你知道吗?
  • 您可以更改文本框的选择画笔颜色,然后执行类似 txtSearchMovie.SelectedText = item; 的操作
猜你喜欢
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多