Cómo obtener el ListBoxItem para un elemento en ListBox en "bind-time"

Tengo un ListBox con objetos Foo y, en función de algunos eventos, deshabilito / habilito los ListBoxItems en el ListBox. Usando la propiedad ListBox.Items encuentro objetos Foo, y por lo que he entendido necesito usar la siguiente función para obtener el contenedor ListBoxItem para Foo. ¿Correcto?

foreach (var item in Items)
{
    var lbi = ItemContainerGenerator.ContainerFromItem(foo) as ListBoxItem;
    // do something
}

En realidad, tengo un control personalizado FilteringListBox que hereda ListBox y le agrega una propiedad adicional. El código anterior está en el código detrás del control personalizado y funciona bien cuando FilteringListBox termina de crearse. Sin embargo, mi problema es que intento hacer esto cuando alguna propiedad está vinculada. Tengo una propiedad FilteringCollection y una PropertyCallback activada cuando esto está vinculado. En esta devolución de llamada, almacenaré la FilteringCollection, pero también haré el filtrado inicial: ejecutaré la colección de conjuntos y deshabilitaré cualquier ListBoxItem que represente un Foo que esté en la FilteringCollection.

Aquí es donde tengo problemas. Encuentro todos los Foos, así que verifico que ItemsSource está configurado, pero al hacer el ItemContainerGenerator.ContainerFromItem obtengo un valor nulo. Es como si los ListBoxItems no se hayan creado todavía. ¿No son ellos? Aquí está mi enlace:

<custom:FilteringListBox ItemsSource="{Binding AvailableFoos}" FilteringCollection="{Binding AlreadyIncludedFoos}"></custom:FilteringListBox>

Entonces; ¿Cómo puedo obtener ListBoxItems en "bind-time"? O, si no puedo; ¿Hay algún evento que pueda anular que me indique que ListBox ha terminado de crear ListBoxItems? Probado Inicializado sin suerte ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta