我有 2 节课:
class MultiSwitch : ListBox
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is MultiSwitchItem;
}
protected override DependencyObject GetContainerForItemOverride( )
{
return new MultiSwitchItem( );
}
}
class MultiSwitchItem : ListBoxItem {...}
基本上,我想根据物品数量放置物品。所以我订阅了集合更改事件,我试图从 Items 集合中接收 MultiSwitchItem。我发现 Items 集合不包含 MultiSwitchItems。然后我找到了看起来像这样的解决方案:
private void RearrangeItems(
object sender,
NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
{
foreach (var item in Items)
{
MultiSwitchItem item2 = ItemContainerGenerator.ContainerFromItem(item) as MultiSwitchItem;
...
}
}
但 item2 始终为空。我究竟做错了什么?
编辑
好的,我在这方面取得了一些进展。仅在初始化控件时才会出现此问题(所以我认为,项目的包装器不是立即创建的)。所以现在的问题是:如何强制创建MultiSwitchItem
s,或者如何在创建包装器后迭代项目?