Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从自定义控件/C#WPF获取项目_C#_Wpf_Listbox - Fatal编程技术网

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

从自定义控件/C#WPF获取项目,c#,wpf,listbox,C#,Wpf,Listbox,我有两门课: class MultiSwitch : ListBox { protected override bool IsItemItsOwnContainerOverride(object item) { return item is MultiSwitchItem; } protected override DependencyObject GetContainerForItemOverride( ) { retur

我有两门课:

class MultiSwitch : ListBox
{
    protected override bool IsItemItsOwnContainerOverride(object item)
    {
        return item is MultiSwitchItem;
    }
    protected override DependencyObject GetContainerForItemOverride( )
    {
        return new MultiSwitchItem( );
    }

}

class MultiSwitchItem : ListBoxItem {...}
基本上,我想根据项目数量放置项目。所以我订阅了collection changed事件,并尝试从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,或者在创建包装器后如何迭代项?

而不是此

ItemContainerGenerator.ContainerFromItem(item as TextBlock)
这样做

ItemContainerGenerator.ContainerFromItem(item)

项不会是
文本块
,它将是底层数据项

,不幸的是,这不是问题的根源。(当我尝试此控件时,我只使用了
TextBlock
s)如果要重新排列项目,为什么不使用CollectionView?另一个解决方案是编写自己的面板。或者,如果您坚持这样做,您可以尝试使用onload事件或ItemContainerGenerator事件,以便稍后开始重新排列。@Dowhile我认为在我的容器中实现此逻辑更容易。。。无论如何,我订阅了加载的事件,它可以工作!谢谢你的帮助!