我有一个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>
答案 0 :(得分:0)
您是否可以使用UpdateSourceTrigger = LostFocus,或者您的程序不接受此操作?
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Name, UpdateSourceTrigger=LostFocus}" />
这个触发器是否仍然会出现问题?