繁体   English   中英

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

[英]Get item from custom control / C# WPF

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

代替这个

ItemContainerGenerator.ContainerFromItem(item as TextBlock)

做这个

ItemContainerGenerator.ContainerFromItem(item)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM