2009-04-13 14 views
2

Ich möchte eine collectionviewsource mit einem Filter filtern, den ich geschrieben habe, aber ich bin mir nicht sicher, wie ich den Filter darauf anwenden kann?Filtern Sie eine WPF collectionviewsource in VB?

Hier ist meine Sammlung Ansicht Quelle:

<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> 

ich einen Filter als solche umgesetzt haben:

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 

So wie kann ich die Collection erhalten durch den Filter auf Last gefiltert? Könntest du mir bitte den Code geben, den ich brauche (nur ein paar Zeilen, die ich finde), da ich noch ziemlich neu in der Programmierung bin.

Danke Jungs

EDIT: Für die Aufzeichnung

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

gibt mir den Fehler:

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

Antwort

0

Sie sollten müssen nur das Ereignis in der XAML anhängen:

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

Danke, aber wenn ich versuche, dass ich bekomme folgenden Fehler: Fehlgeschlagene Objektinitialisierung (ISupportInitialize.EndInit). Die Ansicht 'System.Windows.Data.BindingListCollectionView' unterstützt keine Filterung. Fehler am Objekt 'myCollectionView' –

+0

Die Quelle Ihrer CollectionView unterstützt keine Filterung, da sie auf einer BindingList basiert. Ich bin mir nicht sicher, warum BindingList das Filtern nicht unterstützt, aber eine einfache alte Liste tut es. Versuchen Sie, Ihre Quelle zu einer Liste statt BindingList zu ändern. –

+0

Uuuhhh .... Entschuldigung, ich bin mir nicht sicher, wie ich das machen würde. Ich nehme an "Source =" {Binding Path = Query4, Quelle = {x: Static Application.Current}} "" ist meine verbindliche Liste? Dies bezieht sich auf eine Datentabelle namens Query4. Wie könnte ich daraus eine gewöhnliche Liste machen? danke –

0

Ich hatte das gleiche Problem, bis ich folgendes zu tun beschlossen und funktioniert gut, ich donno, was die Nachteile sind:

<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> 

Hoffnung, das war hilfreich.

1

Ich bin relativ neu zu WPF Codierung awswell. Hier ist, was ich schlage vor, Sie versuchen:

eine Filterfunktion Machen Sie wie folgt vor:

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 

Rufen Sie die Funktion von Ihrem Window_Loaded Ereignis:

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 

Lassen Sie mich wissen, wenn dies nicht funktioniert (Möglicherweise brauchen Sie einige Anpassungen: D)

Verwandte Themen