如何访问一个WPF的ListView的ListViewItems? [英] How can I access the ListViewItems of a WPF ListView?

查看:1325
本文介绍了如何访问一个WPF的ListView的ListViewItems?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在事件,我想将焦点上的ListViewItem的模板内的特定文本框。在XAML看起来是这样的:

Within an event, I'd like to put the focus on a specific TextBox within the ListViewItem's template. The XAML looks like this:

<ListView x:Name="myList" ItemsSource="{Binding SomeList}">
    <ListView.View>
        <GridView>
            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <!-- Focus this! -->
                        <TextBox x:Name="myBox"/>

我试过在code以下的背后:

I've tried the following in the code behind:

(myList.FindName("myBox") as TextBox).Focus();

但我似乎误解了 FindName()文档,因为它返回

另外, ListView.Items 没有帮助,因为(当然)包含我绑定的业务对象和没有ListViewItems。

Also the ListView.Items doesn't help, because that (of course) contains my bound business objects and no ListViewItems.

确实都不 myList.ItemContainerGenerator.ContainerFromItem(项目),这也将返回null。

Neither does myList.ItemContainerGenerator.ContainerFromItem(item), which also returns null.

推荐答案

要理解为什么 ContainerFromItem 没有工作对我来说,这里的一些背景。在这里我需要此功能的事件处理程序是这样的:

To understand why ContainerFromItem didn't work for me, here some background. The event handler where I needed this functionality looks like this:

var item = new SomeListItem();
SomeList.Add(item);
ListViewItem = SomeList.ItemContainerGenerator.ContainerFromItem(item); // returns null

添加() ItemContainerGenerator 不会立即创建容器,因为 Col​​lectionChanged 事件可以在非UI线程来处理。相反,它启动一个异步调用并等待UI线程回调和执行实际的ListViewItem控制产生。

After the Add() the ItemContainerGenerator doesn't immediately create the container, because the CollectionChanged event could be handled on a non-UI-thread. Instead it starts an asynchronous call and waits for the UI thread to callback and execute the actual ListViewItem control generation.

当发生这种情况, ItemContainerGenerator 公开生成所有Container之后被轰出了 StatusChanged 事件通知

To be notified when this happens, the ItemContainerGenerator exposes a StatusChanged event which is fired after all Containers are generated.

现在我要听此事件,并决定是否控制当前要对设置焦点。

Now I have to listen to this event and decide whether the control currently want's to set focus or not.

这篇关于如何访问一个WPF的ListView的ListViewItems?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆