2012-12-10 65 views
-1

我正在使用我創建的WPF控件,並試圖僅通過屬性的值顯示我的列表的某些行。下面是一個例子,我有一個User類,它擁有Active的屬性。如何告訴.xaml該列表應該只顯示活動的人員?如何僅通過篩選WPF ListView中的屬性來顯示數據?

現在我基本上使用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> 
+0

真的不知道爲什麼我的問題是downvoted。我的問題在標題中特別聲明,我想通過WPF列表視圖中的屬性進行過濾。我不想做的是使用linq來過濾我的列表,並將其交給listview。 – meanbunny

+0

好吧,我拿回來,我也說我想使用.xaml。 – meanbunny

回答

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; 
} 
+0

這就是我一直在尋找的感謝! – meanbunny

相關問題