我如何得到一个ListView的行,当我在一行内的文本框编辑文本?



就像标题所说的,我想知道当我编辑一个绑定的TextBox是行/项的一部分时,我将如何获得行/项?

似乎除非我手动选择之前的行,调用<ListView>.SelectedIndex只会让我知道-1<ListView>.SelectedItemnull(这两者在技术上都是有意义的)。

下面是我的ListView的当前设置。

<ListView x:Name="EmployeeListView" Height="108" Margin="10,10,0,0" VerticalAlignment="Top" Width="278" HorizontalAlignment="Left">
<ListView.ItemContainerStyle>
<Style>
<Setter Property="Control.HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Control.VerticalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn x:Name="nameColumn" Header="Name" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="EmployeeNameTextBox" Margin="6,-1,-6,-1" Text="{Binding Name, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TextChanged="EmployeeNameTextBox_TextChanged"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="job_TitleColumn" Header="Job Title" Width="170">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="EmployeeJobTitleTextBox" Margin="-6,-1" Text="{Binding JobTitle, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TextChanged="EmployeeJobTitleTextBox_TextChanged"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>

如有任何帮助,不胜感激。

您可以调整您的项目容器样式,以便在键盘焦点位于项目内时选择项目。

<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Control.HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Control.VerticalContentAlignment" Value="Stretch"/>
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>

在文本框的textchanged事件处理程序中,您可以获得文本框(发送方)的DataContext,这将是底层项。

或者你可以使用VisualTreeHelper来查找父ListViewItem。

相关内容

  • 没有找到相关文章

最新更新