2009-07-10 1 views
2

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

Спасибо!

ответ

2

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

+0

Да, это правильно! Это хорошая идея. – djcouchycouch

0

Вы, вероятно, найдете этот предыдущий вопрос в StackOverflow полезным: .NET --- Textbox control - wait till user is done typing. Вы должны иметь возможность изменять это достаточно легко, чтобы делать то, что вам нужно.

1

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

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

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

EDIT

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

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; 
} 

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

+0

Хммм. Ваша идея в сочетании с предложением Макс Шмелинг может быть хорошим результатом решения. – djcouchycouch

+0

Ну, это не звучит слишком сложно, чтобы добавить обработчики GotFocus и LostFocus, в которых вы должны установить это свойство на восстановленном объекте Binding. –

+0

Отредактировал свой ответ после того, как придумал немного кода. –