首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时为ListBox创建ListBoxItems?

何时为ListBox创建ListBoxItems?
EN

Stack Overflow用户
提问于 2010-09-10 16:06:21
回答 1查看 473关注 0票数 1

我有一个绑定到ItemsSource的ListBox,如下所示:

代码语言:javascript
复制
var foos = new ObservableCollection<Foo> { foo1, foo2, foo3 };
var listBox = new ListBox { ItemsSource = _foos };

现在,我想立即在保存这些项的ListBoxItems上执行一些操作,但它们似乎不是立即创建的。是吗?有没有什么事件我可以通过监听来得到通知,或者我只是试图以一种无效的方式获取ListBoxItem?我是这样做的(并且我已经验证了它在我知道ListBox已经“准备好”的地方工作正常):

代码语言:javascript
复制
var lbi = listBox.ItemContainerGenerator.ContainerFromItem(foo1) as ListBoxItem;

请注意,这是在单元测试中完成的,所以我猜ListBox永远不会被呈现。这就是不创建ListBoxItems的原因吗?我能以某种方式手动触发ListBoxItems的创建吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-10 16:14:32

Items-创建是异步完成的,根据面板的不同,可能根本没有创建(virtualization)。您要查找的事件是ItemContainerGenerator.StatusChanged。在SO上用谷歌搜索一下,你会发现很多例子。然而,直接搜索和处理项目可能会变得复杂。

Here是一篇非常好的文章,详细讨论了项目的创建。另请查找ancestor-article。

顺便说一下:我建议你看看MVVM-pattern。虽然有一点时间你可以轻松地学习它(不能与学习WPF的时间相比),但它会为你节省很多时间。Here你可以找到一个来自Jason Dolinger的视频的链接,它给了你一个很好的起点。

更新:

正如评论中所承诺的,这里有一个搜索可视化树的函数(仅在虚拟化关闭时可用)。

代码语言:javascript
复制
void FindChildFrameworkElementsOfType<T>(DependencyObject parent,IList<T> list) where T: FrameworkElement{             
    DependencyObject child; 
    for(int i=0;i< VisualTreeHelper.GetChildrenCount(parent);i++){             
        child = VisualTreeHelper.GetChild(parent, i); 
        if (child is T) { 
            list.Add((T)child); 
        } 
        FindChildFrameworkElementsOfType<T>(child,list); 
    } 
} 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3683069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档