在 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 ItemsControl 中绕过栅栏原则

WPF NotifyIcon 中 ItemsControl 中按钮的命令绑定

在 Avalonia ItemsControl 中根据 ViewModel 类型选择 DataTemplate

ItemsControl 子项在请求 Canvas.GetLeft 时返回 NAN

如何获取包含 ItemsControl 内容的 Panel 实例?

WPF ItemsControl DataTrigger EnterActions动画未启动