我有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始终为null。我做错了什么?
修改
好的,我有一点进展。此问题仅在控件初始化时出现(因此我认为,项目的包装器不会立即创建)。现在的问题是:如何强制创建MultiSwitchItem
,或者如何在创建包装器后迭代项目?
答案 0 :(得分:0)
而不是
ItemContainerGenerator.ContainerFromItem(item as TextBlock)
这样做
ItemContainerGenerator.ContainerFromItem(item)
项不会是TextBlock
,它将是基础数据项