【问题标题】:How do I only show data by filtering the properties in a WPF ListView?如何仅通过过滤 WPF ListView 中的属性来显示数据?
【发布时间】:2013-01-03 11:35:06
【问题描述】:

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

现在我基本上是使用 linq 来生成一个新列表并根据我想要的将它交给列表视图。但是,我宁愿只将 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>

【问题讨论】:

  • 不太确定为什么我的问题被否决了。我的问题在标题中明确指出我想按 WPF 列表视图中的属性进行过滤。我不想做的是使用 linq 过滤我的列表并将其交给列表视图。
  • 好吧,我收回我还说我想使用 .xaml。

标签: c# wpf listview


【解决方案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;  
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多