过滤observablecollection(mvvm)

时间:2018-06-01 09:56:29

标签: wpf vb.net mvvm filter observable

我有ObservableCollection(Of PdfMarkupAnnotationDataWrapper)绑定到ListBoxEdit。另外,我有一个textbox作为过滤器。

现在,当用户在textbox中输入内容时,我的Viewmodel中的ObservableCollection应该通过textbox的输入进行过滤。

这是我的收藏品

Private Property _annotationList As ObservableCollection(Of PdfMarkupAnnotationDataWrapper)

Public Property AnnotationList As ObservableCollection(Of 

PdfMarkupAnnotationDataWrapper)
      Get
         Return _annotationList
      End Get
      Set(value As ObservableCollection(Of PdfMarkupAnnotationDataWrapper))
         _annotationList = value
         OnPropertyChanged()
      End Set
   End Property

有没有办法完成这项任务?

我正在考虑复制该集合,但必须有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

  

我正在考虑复制该集合,但必须有更好的解决方案。

那就是从中删除或添加项目。但是您仍然需要将原始未过滤的项目存储在另一个集合中。

您可以使用LINQ进行过滤,例如:

Private _unFilteredAnnotationList As ObservableCollection(Of PdfMarkupAnnotationDataWrapper) 'make sure to populate this one
Private _annotationList As ObservableCollection(Of PdfMarkupAnnotationDataWrapper)
Public Property AnnotationList As ObservableCollection(Of PdfMarkupAnnotationDataWrapper)
    Get
        Return _annotationList
    End Get
    Set(value As ObservableCollection(Of PdfMarkupAnnotationDataWrapper))
        _annotationList = value
        OnPropertyChanged()
    End Set
End Property

Private _text As String
Public Property Text As String
    Get
        Return _text
    End Get
    Set(value As String)
        _text = value
        OnPropertyChanged()
        'filter
        AnnotationList = New ObservableCollection(Of PdfMarkupAnnotationDataWrapper)(_unFilteredAnnotationList.Where(Function(x)
                                                                                                                         Return x.YourStringProperty.StartsWith(_text)
                                                                                                                     End Function))
    End Set
End Property