在 ItemsControl 中 UpdateSourceTrigger 设置为 PropertyChanged 的 ListBox 在键入时失去焦点
Posted
技术标签:
【中文标题】在 ItemsControl 中 UpdateSourceTrigger 设置为 PropertyChanged 的 ListBox 在键入时失去焦点【英文标题】:ListBox with UpdateSourceTrigger set to PropertyChanged in ItemsControl looses focus while typing 【发布时间】: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,我应该检查一下!
【参考方案1】:
您是否可以使用 UpdateSourceTrigger=LostFocus 或者您的程序不能接受?
<TextBox Grid.Row="0" Grid.Column="1" Text="Binding Name, UpdateSourceTrigger=LostFocus" />
这个触发器是否仍然存在您的问题?
【讨论】:
输入时焦点不会丢失,但我无法注册值的更改,直到用户单击其他位置,这将是迟到的。以上是关于在 ItemsControl 中 UpdateSourceTrigger 设置为 PropertyChanged 的 ListBox 在键入时失去焦点的主要内容,如果未能解决你的问题,请参考以下文章
WPF NotifyIcon 中 ItemsControl 中按钮的命令绑定
在 Avalonia ItemsControl 中根据 ViewModel 类型选择 DataTemplate
ItemsControl 子项在请求 Canvas.GetLeft 时返回 NAN