从自定义控件/ C#WPF获取项目

时间:2013-04-26 10:07:16

标签: c# wpf listbox

我有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,或者如何在创建包装器后迭代项目?

1 个答案:

答案 0 :(得分:0)

而不是

ItemContainerGenerator.ContainerFromItem(item as TextBlock)

这样做

ItemContainerGenerator.ContainerFromItem(item)

项不会是TextBlock,它将是基础数据项