我有一个带有foo对象的列表框,根据一些事件,我禁用/启用列表框中的列表框项。使用listbox.items属性可以找到foo对象,根据我所了解的,我需要使用以下函数来获取foo的listbox item容器。对的?
foreach (var item in Items)
{
var lbi = ItemContainerGenerator.ContainerFromItem(foo) as ListBoxItem;
// do something
}
实际上,我有一个自定义控件filteringlistbox,它继承了listbox并向它添加了一个额外的属性。上面的代码位于自定义控件的代码后面,在创建filteringListBox后工作正常。但我的问题是,当某些属性被绑定时,我会尝试这样做。我有一个属性filteringcollection和一个在绑定时触发的属性回调。在这个回调中,我将存储filtering collection,但我也将执行初始筛选-在集合中运行,并禁用表示filtering collection中的foo的任何ListBoxItem。
这就是我遇到问题的地方。我找到了所有的foo,所以我验证了itemssource是否已设置,但是执行itemcontainerGenerator.containerFromitem时得到了空值。就像列表框项还没有创建一样。是吗?这是我的装订:
<custom:FilteringListBox ItemsSource="{Binding AvailableFoos}" FilteringCollection="{Binding AlreadyIncludedFoos}"></custom:FilteringListBox>
那么;或者:我如何在“绑定时间”上获取ListBoxItem?或者-如果我不能;是否有可以重写的事件告诉我列表框已完成创建列表框项?尝试初始化时没有运气…