2016-02-19 5 views
1

У меня есть ItemControl, который привязывается к ObservableCollection с простым классом, который содержит две строки. Для каждого элемента коллекции показаны два текстовых поля. Я установил UpdateSourceTrigger привязки TextBox к PropertyChanged, потому что мне нужно немедленно обнаружить изменения значений.ListBox с UpdateSourceTrigger установлен в PropertyChanged в ItemsControl теряет фокус при вводе

Проблема заключается в том, что когда я начинаю вводить текст в один из текстовых полей, фокус текстового поля теряется после нажатия первой клавиши. Если я хочу вставить следующую букву, мне нужно снова щелкнуть в текстовом поле. Я не знаю, почему фокус текстового поля теряется после изменения. Кто-нибудь знает, как я могу изменить это поведение?

Когда я удаляю часть 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> 
+2

Я создал окно и добавил 'ItemsControl' с помощью вашего xaml, но не смог воспроизвести проблему – ASh

+0

Да, проблема не в размещенном коде. Возможно, в коде есть некоторая обработка событий. – icebat

+0

Ок, вы правы, произошла ошибка в обработке событий, которая вызвала странное поведение. Спасибо ASh и icebat, я должен был проверить это! – NicoP

ответ

0

Возможно ли использовать UpdateSourceTrigger = LostFocus или это не приемлемо с вашей программой?

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

Является ли ваша проблема все еще случающейся с этим триггером?

+1

Фокус не будет потерян при наборе текста, но я не смог бы зарегистрировать изменение значения, пока пользователь не щелкнет где-то еще, и это будет поздно. – NicoP