Usando un objeto no de colección como un DataSource

Un grupo de componentes de dotnet framework usa un componente DataSource. Tengo un objeto que tiene una serie de configuraciones que pueden modificar el DataSource que representa. Me gustaría establecer este objeto como la fuente de datos desplegable de un conjunto de ComboBoxes y DataGridViewComboBoxCells.

Mi problema viene cuando intento enganchar la cosa al ComboBox. Supongo que debido a que los cambios en el DataSource pueden suceder una vez que se haya establecido el DataSource, tengo que usar uno de estos elementos de BindingSource, pero la literatura de MSDN está sacando su broma habitual de decirme qué es un bindingSource sin decirme qué hace o como funciona

¿Cuál es la mejor manera que ustedes pueden sugerir de conectar este Objeto como un DataSource / BindingSource?

EDITAR:
Obviamente, esta clase es basura, pero ilustra el tipo de objeto que tengo ahora.
La mayor parte del tiempo está en el aire en este momento, pero básicamente lo que esto demuestra es que mi clase no es una colección en sí, sino que contiene una. Necesito poder indicar a la propiedad DataSource de un ComboBox que hay una lista volátil que se encuentra aquí, y que debería usar esa lista como el DataSource para su menú desplegable.

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta