[英]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.