如何通过过滤WPF ListView中的属性来显示数据?

时间:2012-12-10 14:28:48

标签: c# wpf listview

我正在使用我创建的WPF控件,并且我尝试仅按属性值显示列表的某些行。一个例子如下,我有一个User类,它包含一个Active属性。如何告诉.xaml列表应该只显示活动的人?

现在我基本上使用linq生成一个新列表,并根据我想要的内容将其传递给listview。但是,我宁愿把ListView交给我的整个列表,让它为我做的工作。

这是我的ListView代码。

<ListView ItemsSource="{Binding}" DataContext="{Binding }" >
     <ListView.View>
          <GridView>
               <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                         <DataTemplate>
                              <StackPanel>
                                   <TextBlock Text="{Binding Index}"/>
                                   <TextBlock Text=". " />
                                   <TextBlock Text="{Binding FirstName}" />
                                   <TextBlock Text="{Binding LastName}" />
                              </StackPanel>
                         </DataTemplate>
                    </GridViewColumn.CellTemplate>
               </GridViewColumn>
          </GridView>
     </ListView.View>
</ListView>

1 个答案:

答案 0 :(得分:1)

您需要一些代码来添加过滤器:

请参阅:WPF filtering

ICollectionView view = CollectionViewSource.GetDefaultView(lstMovies.ItemsSource);  
view.Filter = null;  
view.Filter = new Predicate<object>(FilterMovieItem);  


private bool FilterMovieItem(object obj)  
{  
    MovieItem item = obj as MovieItem;  
    if (item == null) return false;  

    string textFilter = txtFilter.Text;  

    if (textFilter.Trim().Length == 0) return true; // the filter is empty - pass all items  

    // apply the filter  
    if (item.MovieName.ToLower().Contains(textFilter.ToLower())) return true;  
    return false;  
}