2012-01-07 63 views
0

我在WPF列表框databinded到的ObservableCollection要将过滤器

     <ListBox Margin="0,0,-12,0" ItemsSource="{Binding ShopList}" 
          ScrollViewer.VerticalScrollBarVisibility="Auto" 
          Grid.Row="1" 
          Grid.ColumnSpan="2" KeyDown="ListBox_KeyDown" KeyUp="ListBox_KeyUp" 
          > 
         <ListBox.ItemTemplate> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal" Margin="0,0,0,17" > 
            <!--Replace rectangle with image--> 
            <Rectangle Height="50" Width="50" Stroke="Black" StrokeThickness="6" Margin="12,0,9,0"/> 

            <StackPanel Width="Auto"> 
             <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
             <TextBlock Text="{Binding Quantity}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/> 
            </StackPanel> 
           </StackPanel> 
          </DataTemplate> 
         </ListBox.ItemTemplate> 
        </ListBox> 

然后我有一个过滤器的方法,我想叫

private void ShopItemDay_Filter(object sender, FilterEventArgs e) 
    { 
     var item = e.Item as ShopItem; 

     e.Accepted = item.Day == 1; 
    } 

但我不能找到任何属性在列表框中使用类似于此处的过滤方法http://www.galasoft.ch/mydotnet/articles/article-2007081301.aspx

回答

1

正如您在链接到的文章中所看到的,过滤器不是Control的属性。它是CollectionViewSource的一个属性,它是集合的一种包装。这个包装允许排序,分组和过滤。

3

您需要在您的收藏中创建一个“视图”。请参阅CollectionView.Filter的文档。该框架将为所有绑定集合创建一个默认视图。您可以添加一个过滤器,如下所示:

ICollectionView _customerView = CollectionViewSource.GetDefaultView(customers); 
_customerView.Filter = CustomerFilter 

private bool CustomerFilter(object item) 
{ 
    Customer customer = item as Customer; 
    return customer.Name.Contains(_filterString); 
} 

(From tutorial);