【发布时间】:2016-02-19 18:21:08
【问题描述】:
我有一个 ItemsControl,它通过一个包含两个字符串的简单类绑定到 ObservableCollection。对于集合的每个项目,显示了两个文本框。我将 Textbox 绑定的 UpdateSourceTrigger 设置为 PropertyChanged,因为我需要立即检测值的变化。
问题是当我开始在其中一个文本框中输入文本时,在按下第一个键后文本框的焦点会丢失。如果我想插入下一个字母,我必须再次单击文本框。我不知道为什么更改后文本框的焦点会丢失。有人知道我可以如何改变这种行为吗?
当我删除 UpdateSourceTrigger 部分并使用默认绑定行为时,一切正常,但这对我来说不是选项,因为我需要立即检测到更改。
我也尝试过使用 ListBox 或 ListView 代替 ItemsControl,但是在更改值后文本框的焦点也丢失了。
这是我对 ItemsControl 的声明:
<ItemsControl ItemsSource="{Binding Names}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Name" />
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="Description" />
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Description, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
【问题讨论】:
-
我创建了一个窗口并使用您的 xaml 添加了
ItemsControl,但无法重现该问题 -
是的,问题不在发布的代码中。也许后面的代码中有一些事件处理。
-
好的,你是对的,事件处理中有一个错误导致了奇怪的行为。谢谢 Ash 和 icebat,我应该检查一下!
标签: c# wpf listbox focus itemscontrol