Fooオブジェクトを含むListBoxがあり、いくつかのイベントに基づいて、ListBoxのListBoxItemsを無効/有効にします。ListBox.Itemsプロパティを使用して、Fooオブジェクトを見つけました。理解したことから、FooのListBoxItemコンテナーを取得するには、次の関数を使用する必要があります。正しい?
foreach (var item in Items)
{
var lbi = ItemContainerGenerator.ContainerFromItem(foo) as ListBoxItem;
// do something
}
実際、私はListBoxを継承し、それに追加のプロパティを追加するカスタムコントロールFilteringListBoxを持っています。上記のコードは、カスタムコントロールの背後にあるコード内にあり、FilteringListBoxの作成が完了すると正常に機能します。ただし、私の問題は、いくつかのプロパティがバインドされているときにこれを実行しようとすることです。プロパティFilteringCollectionと、これがバインドされたときにトリガーされるPropertyCallbackがあります。このコールバックでは、FilteringCollectionを保存しますが、最初のフィルタリングも実行します。つまり、setコレクションを実行し、FilteringCollectionにあるFooを表すListBoxItemを無効にします。
これは私が問題を抱えるところです。すべてのFooを見つけたので、ItemsSourceが設定されていることを確認しましたが、ItemContainerGenerator.ContainerFromItemを実行するとnullになります。ListBoxItemsがまだ作成されていないようです。そうじゃない?これが私のバインディングです:
<custom:FilteringListBox ItemsSource="{Binding AvailableFoos}" FilteringCollection="{Binding AlreadyIncludedFoos}"></custom:FilteringListBox>
それで; どちらか:「バインド時」にListBoxItemsを取得するにはどうすればよいですか?または-私ができない場合; ListBoxがListBoxItemsの作成を完了したことを通知するオーバーライド可能なイベントはありますか?運がなくてInitializedを試してみました...