2009-04-13 3 views
2

Я хочу, чтобы фильтр collectionviewsource с помощью фильтра, который я написал, но я не уверен, как я могу применить фильтр к нему?Фильтр wpf collectionviewsource в VB?

Вот моя коллекция просмотреть исходный код:

<Grid.Resources> 
     <CollectionViewSource x:Key="myCollectionView" 
      Source="{Binding Path=Query4, Source={x:Static Application.Current}}"> 
      <CollectionViewSource.SortDescriptions> 
       <scm:SortDescription PropertyName="ContactID" 
            Direction="Descending"/> 
      </CollectionViewSource.SortDescriptions> 
     </CollectionViewSource> 
    </Grid.Resources> 

я реализовал фильтр, как, например:

Private Sub WorkerFilter(ByVal sender As Object, ByVal e As FilterEventArgs) 

    Dim value As Object = CType(e.Item, System.Data.DataRow)("StaffSection") 

    If (Not value Is Nothing) And (Not value Is DBNull.Value) Then 
     If (value = "Builder") Or (value = "Office Staff") Then 
      e.Accepted = True 

     Else 

      e.Accepted = False 
     End If 
    End If 
End Sub 

Так как я могу получить CollectionViewSource отфильтрованной фильтром на нагрузке? Не могли бы вы предоставить весь код hte, который мне нужен (только несколько строк, которые я рисую), поскольку я совершенно новичок в кодировании.

Спасибо ребята

EDIT: Для записи

<CollectionViewSource x:Key="myCollectionView" Filter="WorkerFilter" ... /> 

дает мне ошибку:

Failed object initialization (ISupportInitialize.EndInit). 'System.Windows.Data.BindingListCollectionView' view does not support filtering. Error at object 'myCollectionView'

ответ

0

Вы должны просто нужно прикрепить событие в XAML:

<CollectionViewSource x:Key="myCollectionView" Filter="WorkerFilter" ...> 
+1

Спасибо, но когда я попробую, я получаю следующую ошибку: Инициализация неудачного объекта (ISupportInitialize.EndInit). «Просмотр System.Windows.Data.BindingListCollectionView» не поддерживает фильтрацию. Ошибка в объекте 'myCollectionView' – 2009-04-13 16:23:50

+0

Источник вашего CollectionView не поддерживает фильтрацию, потому что он основан на BindingList. Я не уверен, почему BindingList не поддерживает фильтрацию, но обычный старый список. Попробуйте изменить источник на список , а не на BindingList . –

+0

Uuuhhh .... извините, я не уверен, как бы я это сделал. Я предполагаю, что «Source =» {Binding Path = Query4, Source = {x: Static Application.Current}} «Мой список привязок? Это относится к datatable, называемому Query4. Как я могу превратить это в обычный список? спасибо – 2009-04-13 17:17:30

0

У меня было та же проблема, пока я не решил сделать следующее и работаю хорошо, я Donno какие минусы:

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:data="clr-namespace:System.Windows.Data;assembly=PresentationFramework"> 

    <CollectionViewSource 
    x:Key="FilteredBindingListCollection" 
    CollectionViewType="{x:Type data:ListCollectionView}" /> 

</Window> 

Надеется, что это было полезно.

1

Я относительно новичок в кодировании WPF. Вот что я предлагаю вам попробовать:

Сделайте функцию фильтра следующим образом:

Public Function FilterList(item As Object) As Boolean 
     Dim value as Object = item 
     If (Not value Is Nothing) And (Not value Is DBNull.Value) Then 
     If (value = "Builder") Or (value = "Office Staff") Then 
      Return True 

     Else 

      Return False 
     End If 
    End If 
End Function 

Вызвать функцию от Вашего мероприятия Window_Loaded:

Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles MainWindow.Loaded 
    MyCollectionView = CollectionViewSource.GetDefaultView(Query4) 'May not be needed, IDK 
    MyCollectionView.Filter = New Predicate(Of Object)(AddressOf FilterList) 
End Sub 

Позвольте мне знать, если это не работает (Может понадобиться корректировка: D)

Смежные вопросы