无法从Treeview中的项目中找到容器

时间:2011-11-29 16:20:59

标签: silverlight silverlight-4.0

我得到了ItemsControlTreeviewTreevieItemItem充满了我自己的模型。

我不想以编程方式展开TreeView。所以我试试这个:

var model = itemsControl_.Items.Select(i => i as MyModel).Where(ftn => ftn != null && ftn.key = searchedKey));

现在我已经创建了一个想要展开的模型。我搜索容器展开它:

var tvi = itemsControl_.ItemContainerGenerator.ContainerFromItem(model) as TreeViewItem;
 if(tvi!=null)
 {
  if (!tvi.IsExpanded)
  {
   tvi.IsExpanded = true;
  }     
 }

有时tvi为空!?!

有人可以解释一下这是怎么可能的吗?

1 个答案:

答案 0 :(得分:0)

根据您的描述,您似乎想要扩展TreeViewItem。    我认为这很可能是由虚拟化引起的。默认情况下,TreeView会启用Virtualizating Attached属性,这意味着如果某个项目不在视口中,则可能无法获得容器。    如果在TreeView上调用GetContainerFromItem,则ItemContainerGenerator仅搜索TreeView的直接子对象。因此,您需要以递归方式遍历TreeView和子TreeViewItem对象。更复杂的是,如果TreeView虚拟化其项目(通过将VirtualizingStackPanel.IsVirtualizing属性设置为true来启用虚拟化),则需要先创建子项目,然后才能检查其数据对象。

希望这会有所帮助。

请参阅http://blogs.msdn.com/b/wpfsdk/archive/2010/02/23/finding-an-object-treeviewitem.aspx

此致 迪帕克