将ItemsStrol中的UpdateSourceTrigger设置为PropertyChanged的ListBox在键入时失去焦点

时间:2016-02-19 18:21:08

标签: c# wpf listbox focus itemscontrol

我有一个ItemsControl,它绑定到一个ObservableCollection,其中包含一个包含两个字符串的简单类。对于集合的每个项目,将显示两个TextBox。我将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>

1 个答案:

答案 0 :(得分:0)

您是否可以使用UpdateSourceTrigger = LostFocus,或者您的程序不接受此操作?

<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Name, UpdateSourceTrigger=LostFocus}" />

这个触发器是否仍然会出现问题?