C# Listview中的TextBox-获取TextBox上的ListViewItem TextChanged

C# Listview中的TextBox-获取TextBox上的ListViewItem TextChanged,c#,wpf,xaml,C#,Wpf,Xaml,我有一个列表视图,它显示一些文本框。对于每个文本框,我将捕获一个SelectionChanged事件 我的XAML文件如下所示: <ListView> <GridView> ... <DataTemplate> <TextBox SelectionChanged="Box_SelectionChanged" /> </DataTemplate>

我有一个
列表视图
,它显示一些
文本框
。对于每个
文本框
,我将捕获一个
SelectionChanged
事件

我的XAML文件如下所示:

<ListView>
    <GridView>
        ...
        <DataTemplate>
            <TextBox SelectionChanged="Box_SelectionChanged" />
        </DataTemplate>
        ...
    </GridView>
</ListView>
private void Box_SelectionChanged(object sender, TextChangedEventArgs e) {}
在我的
框\u selection changed
函数中,我想获取更新文本框的
列表视图项

我该怎么做?

您可以尝试以下方法:

将此方法添加到类:

public static T FindVisualParent<T>(UIElement element) where T : UIElement
        {
            UIElement parent = element; while (parent != null)
            {
                T correctlyTyped = parent as T; if (correctlyTyped != null)
                {
                    return correctlyTyped;
                }
                parent = VisualTreeHelper.GetParent(parent) as UIElement;
            } return null;
        }
公共静态T findvisualpart(UIElement元素),其中T:UIElement
{
UIElement父元素=元素;而(父元素!=null)
{
T correctlyTyped=父级为T;if(correctlyTyped!=null)
{
返回正确类型;
}
parent=VisualTreeHelper.GetParent(parent)作为UIElement;
}返回null;
}
并在框中选择已更改的事件处理程序调用此方法:

        private void Box_SelectionChanged(object sender, RoutedEventArgs e)
        {          
            var tmp = FindVisualParent<ListViewItem>(sender as TextBox);
        }
private void Box\u选择已更改(对象发送方、路由目标方)
{          
var tmp=FindVisualParent(发送方为文本框);
}
您可以尝试以下方法:

将此方法添加到类:

public static T FindVisualParent<T>(UIElement element) where T : UIElement
        {
            UIElement parent = element; while (parent != null)
            {
                T correctlyTyped = parent as T; if (correctlyTyped != null)
                {
                    return correctlyTyped;
                }
                parent = VisualTreeHelper.GetParent(parent) as UIElement;
            } return null;
        }
公共静态T findvisualpart(UIElement元素),其中T:UIElement
{
UIElement父元素=元素;而(父元素!=null)
{
T correctlyTyped=父级为T;if(correctlyTyped!=null)
{
返回正确类型;
}
parent=VisualTreeHelper.GetParent(parent)作为UIElement;
}返回null;
}
并在框中选择已更改的事件处理程序调用此方法:

        private void Box_SelectionChanged(object sender, RoutedEventArgs e)
        {          
            var tmp = FindVisualParent<ListViewItem>(sender as TextBox);
        }
private void Box\u选择已更改(对象发送方、路由目标方)
{          
var tmp=FindVisualParent(发送方为文本框);
}

@Bob.-我曾尝试将发送者转换为文本框,以查看是否可以从中获取ListViewItem,但没有运气当您调试时,发送者显示为什么类型的对象?@Bob。它的类型是
System.Windows.Controls.TextBox
Odd,在调试器的可视化树中,您无法找到ListView@Bob. - 我曾尝试将发送者转换为文本框,以查看是否可以从中获取ListViewItem,但没有运气当您调试时,发送者显示为什么类型的对象?@Bob。它的类型是
System.Windows.Controls.TextBox
Odd,在调试器的可视化树中,您无法找到ListViewCool,谢谢。有没有办法通过sender对象中的属性或方法获取父对象,或者每次都必须对整个ListView执行搜索?不客气。您不会对整个ListView执行搜索,每次调用此方法时只检查7个元素。你可以在Snoop()中查看这个。很酷,谢谢。有没有办法通过sender对象中的属性或方法获取父对象,或者每次都必须对整个ListView执行搜索?不客气。您不会对整个ListView执行搜索,每次调用此方法时只检查7个元素。您可以在Snoop()中检查这一点。