Wie erhalte ich das ListBoxItem für ein Element in ListBox bei "Bindungszeit"?

Ich habe eine ListBox mit Foo-Objekten und basierend auf einigen Ereignissen deaktiviere / aktiviere ich die ListBoxItems in der ListBox. Mit der ListBox.Items-Eigenschaft finde ich Foo-Objekte, und nach meinem Verständnis muss ich die folgende Funktion verwenden, um den ListBoxItem-Container für Foo abzurufen. Richtig

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

Eigentlich habe ich ein benutzerdefiniertes Steuerelement FilteringListBox, das ListBox erbt und eine zusätzliche Eigenschaft hinzufügt. Der obige Code befindet sich im Code hinter dem benutzerdefinierten Steuerelement und funktioniert einwandfrei, wenn die FilteringListBox fertig erstellt wurde. Mein Problem ist jedoch, dass ich dies versuche, wenn eine Eigenschaft gebunden ist. Ich habe eine Eigenschaft FilteringCollection und ein PropertyCallback ausgelöst, wenn dies gebunden ist. In diesem Rückruf werde ich die FilteringCollection speichern, aber ich werde auch die anfängliche Filterung durchführen - indem ich die Set-Auflistung durchlaufe und jedes ListBoxItem deaktiviere, das ein Foo darstellt, das sich in der FilteringCollection befindet.

Hier bekomme ich Probleme. Ich finde alle Foos, also überprüfe ich, ob die ItemsSource gesetzt ist, aber beim ItemContainerGenerator.ContainerFromItem erhalte ich null. Es ist, als ob die ListBoxItems noch nicht erstellt wurden. Sind sie nicht Hier ist meine Bindung:

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

So; entweder: Wie kann ich die ListBoxItems auf "Bind-Time" bekommen? Oder - wenn ich nicht kann; Gibt es ein Ereignis, das ich überschreiben kann, das besagt, dass die ListBox die Erstellung von ListBoxItems abgeschlossen hat? Versuchte OnInitialized ohne Glück ...

Antworten auf die Frage(4)

Ihre Antwort auf die Frage