就像标题所说的,我想知道当我编辑一个绑定的TextBox
是行/项的一部分时,我将如何获得行/项?
似乎除非我手动选择之前的行,调用<ListView>.SelectedIndex
只会让我知道-1
和<ListView>.SelectedItem
是null
(这两者在技术上都是有意义的)。
下面是我的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。