Проблема с ручным редактированием текстового поля, привязанного к постоянно обновляемому свойству

У меня есть текстовое поле, привязанное к свойству. Свойство постоянно обновляется по таймеру. Что я пытаюсь сделать, так это сделать так, чтобы, когда я набираю что-то в текстовом поле, текстовое поле перестало обновляться из свойства. Есть ли способ сделать это?

Спасибо!


person djcouchycouch    schedule 10.07.2009    source источник


Ответы (4)


Я не эксперт по WPF или привязке данных, поэтому может быть лучший способ, но я бы сказал, что вам придется обрабатывать события GotFocus и LostFocus и добавлять/удалять привязку данных в этих обработчиках событий.

person Max Schmeling    schedule 10.07.2009

Я бы сделал что-то в порядке:

  public void Timer_Tick(object sender,EventArgs eArgs)
  {
    if(!Textbox.GotFocus())
    {
          // Regular updating of textbox  
    }
  }
person taserian    schedule 10.07.2009

Если у вас есть доступ к объекту Binding, вы можете установить для его свойства UpdateSourceTrigger значение Explicit, что предотвратит автоматическое обновление.

ИЗМЕНИТЬ

Возможно, что-то вроде этого

UpdateSourceTrigger old;

protected override void OnGotFocus(RoutedEventArgs e)
{
    Binding b = BindingOperations.GetBinding(textBox1, TextBox.TextProperty);
    old = b.UpdateSourceTrigger;
    b.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;
}

protected override void OnLostFocus(RoutedEventArgs e)
{
    Binding b = BindingOperations.GetBinding(textBox1, TextBox.TextProperty);
    b.UpdateSourceTrigger = old;
}

Конечно, это короткая форма, без проверки нулей и т.д.

person Kenan E. K.    schedule 10.07.2009
comment
Хм. Ваша идея в сочетании с предложением Макса Шмелинга может привести к решению. - person djcouchycouch; 10.07.2009
comment
Ну, не кажется слишком сложным добавить обработчики GotFocus и LostFocus, в которых вы бы установили это свойство для извлеченного объекта Binding. - person Kenan E. K.; 10.07.2009

Вы, вероятно, найдете этот предыдущий вопрос StackOverflow полезным: .NET - -- Управление текстовым полем – подождите, пока пользователь закончит печатать. Вы должны быть в состоянии изменить это довольно легко, чтобы делать то, что вам нужно.

person Bojan Rajkovic    schedule 10.07.2009