Usando um objeto não-coleção como um DataSource

Um grupo de componentes de framework dotnet usa um componente DataSource. Eu tenho um objeto que tem um número de configurações que podem modificar o DataSource que ele representa. Eu gostaria de definir esse objeto como o DataSource suspenso de um conjunto de ComboBoxes e DataGridViewComboBoxCells.

Meu problema surge ao tentar realmente ligar a coisa na caixa de combinação. Eu acho que porque as alterações no DataSource podem acontecer uma vez que o DataSource foi definido, eu tenho que usar uma dessas coisas BindingSource, mas a literatura MSDN está puxando sua brincadeira habitual de me dizer o que é um bindingSource sem me dizer o que faz ou como funciona.

Qual é a melhor maneira que vocês podem sugerir de ligar este Objeto como um DataSource / BindingSource?

EDITAR:
Obviamente, essa classe é lixo, mas ilustra o tipo de objeto que tenho agora.
A maior parte do tempo está no ar no momento, mas basicamente o que isso mostra é que minha classe não é uma coleção em si, mas contém uma. Eu preciso ser capaz de instruir a propriedade DataSource de um ComboBox que há uma lista volátil a ser encontrada aqui e que deve usar essa lista como DataSource para sua lista suspensa.

<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