Używanie obiektu innego niż kolekcja jako źródła danych

Kilka komponentów struktury dotnet używa komponentu DataSource. Mam obiekt, który ma wiele ustawień, które mogą modyfikować źródło danych, które reprezentuje. Chciałbym ustawić ten obiekt jako rozwijane źródło danych zestawu ComboBoxes i DataGridViewComboBoxCells.

Mój problem pojawia się, gdy próbuję podłączyć urządzenie do ComboBoxa. Domyślam się, że ponieważ zmiany w DataSource mogą się zdarzyć po ustawieniu DataSource, muszę użyć jednej z tych rzeczy BindingSource, ale literatura MSDN ciągnie swój zwykły wybryk mówienia mi, co to jest źródło powiązań, nie mówiąc mi, co robi lub jak to działa.

Jaki jest najlepszy sposób na podpięcie tego obiektu jako DataSource / BindingSource?

EDYTOWAĆ:
Oczywiście ta klasa to śmieci, ale ilustruje ona rodzaj obiektu, który mam teraz.
Większość czasu jest w tej chwili w powietrzu, ale w zasadzie to, co pokazuje to, że moja klasa nie jest samą kolekcją, ale zawiera jedną. Muszę być w stanie poinstruować właściwość DataSource ComboBox, że znajduje się tutaj lista ulotna, i że powinna użyć tej listy jako źródła danych dla jej listy rozwijanej.

<code>Public Class DynamicDataSource
    Private basicList As New List(Of String)(New String() {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"})
    Private _showEvensOnly As Boolean
    Private _showNotContainingO As Boolean
    Public Property ShowEvensOnly() As Boolean
        Get
            Return _showEvensOnly
        End Get
        Set(ByVal value As Boolean)
            _showEvensOnly = value
        End Set
    End Property
    Public Property ShowNotContainingO() As Boolean
        Get
            Return _showNotContainingO
        End Get
        Set(ByVal value As Boolean)
            _showNotContainingO = value
        End Set
    End Property
    Public Function GetDynamicList() As List(Of String)
        Dim processMe As New List(Of String)(basicList)
        If Me._showEvensOnly Then
            For JJ As Integer = processMe.Count - 1 To 0 Step -1
                If JJ Mod 2 = 0 Then
                    processMe.Remove(processMe(JJ))
                End If
            Next
        End If

        If Me._showNotContainingO Then
            For JJ As Integer = processMe.Count - 1 To 0 Step -1
                If processMe(JJ).ToUpper.Contains("O"c) Then
                    processMe.Remove(processMe(JJ))
                End If
            Next
        End If

        Return processMe
    End Function
End Class
</code>

questionAnswers(1)

yourAnswerToTheQuestion