单击封闭的文本框时,ListView SelectionChanged 不会更新
ListView SelectionChanged won't update when enclosed TextBox clicked
我有一个带有网格视图的列表视图。 gridview 第二列包含文本框(如果这与此特定问题相关,则文本框由数据模板呈现)。
我希望当用户在文本框中单击以键入并反映包含文本框的行(或列表视图项)时更新列表视图 SelectedItem。现在 listview SelectedItem 仅当用户点击文本框外的行时才会更新。如果我单击文本框或在其中键入内容,突出显示的行将保持不变,并且列表视图不会发生 SelectionChanged。
如何更新列表视图的选定项?我是否可以强制更改其选定项或启用列表视图以某种方式将文本框单击视为自己的单击?
提前致谢。
P.s。解决方案位于此处:
https://drive.google.com/file/d/0B89vOvsI7UbdTmN5RVdLVTFGeXM/view?usp=sharing
列表视图xaml:
<ListView x:Name="CombinedlistView" Grid.Column="0"
DataContext="{Binding ElementName=mainWindow}"
SelectedIndex="{Binding Path=SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView >
<GridViewColumn CellTemplate="{StaticResource labelTemplate}" />
<GridViewColumn CellTemplateSelector="{StaticResource fieldValueTemplateSelector}" />
</GridView>
</ListView.View>
</ListView>
模板选择器:
<loc:FieldValueTemplateSelector x:Key="fieldValueTemplateSelector"
StringTemplate="{StaticResource stringTemplate}"
DateTimeTemplate="{StaticResource dateTimeTemplate}"/>
文本框所在的数据模板:
<DataTemplate x:Key="stringTemplate" DataType="{x:Type System:String}">
<StackPanel Style="{StaticResource dataTemplateStackPanelStyle}" Name="stringTemplStack">
<TextBox Name="searchValText" Width="120"
Text="{Binding Path=TextVal, Mode=OneWayToSource}"
DataContext="{Binding ElementName=mainWindow}"/>
</StackPanel>
</DataTemplate>
尝试将此事件连接到您的 listviewitem 上的 PreviewGotKeyboardFocus
事件:
protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
ListViewItem item = (ListViewItem)sender;
item.IsSelected = true;
}
我有一个带有网格视图的列表视图。 gridview 第二列包含文本框(如果这与此特定问题相关,则文本框由数据模板呈现)。
我希望当用户在文本框中单击以键入并反映包含文本框的行(或列表视图项)时更新列表视图 SelectedItem。现在 listview SelectedItem 仅当用户点击文本框外的行时才会更新。如果我单击文本框或在其中键入内容,突出显示的行将保持不变,并且列表视图不会发生 SelectionChanged。
如何更新列表视图的选定项?我是否可以强制更改其选定项或启用列表视图以某种方式将文本框单击视为自己的单击?
提前致谢。
P.s。解决方案位于此处:
https://drive.google.com/file/d/0B89vOvsI7UbdTmN5RVdLVTFGeXM/view?usp=sharing
列表视图xaml:
<ListView x:Name="CombinedlistView" Grid.Column="0"
DataContext="{Binding ElementName=mainWindow}"
SelectedIndex="{Binding Path=SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView >
<GridViewColumn CellTemplate="{StaticResource labelTemplate}" />
<GridViewColumn CellTemplateSelector="{StaticResource fieldValueTemplateSelector}" />
</GridView>
</ListView.View>
</ListView>
模板选择器:
<loc:FieldValueTemplateSelector x:Key="fieldValueTemplateSelector"
StringTemplate="{StaticResource stringTemplate}"
DateTimeTemplate="{StaticResource dateTimeTemplate}"/>
文本框所在的数据模板:
<DataTemplate x:Key="stringTemplate" DataType="{x:Type System:String}">
<StackPanel Style="{StaticResource dataTemplateStackPanelStyle}" Name="stringTemplStack">
<TextBox Name="searchValText" Width="120"
Text="{Binding Path=TextVal, Mode=OneWayToSource}"
DataContext="{Binding ElementName=mainWindow}"/>
</StackPanel>
</DataTemplate>
尝试将此事件连接到您的 listviewitem 上的 PreviewGotKeyboardFocus
事件:
protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
ListViewItem item = (ListViewItem)sender;
item.IsSelected = true;
}