WPF: текст TextBox не обновляет

Синтаксис:

пустой сон (неподписанные секунды);

сон () приостанавливает выполнение за интервал (секунды). С вызовом для сна текущая программа приостановлена от выполнения за число секунд, определенных секундами аргумента. Интервал точен только к самой близкой сотой части секунды или с точностью часов операционной системы, какой бы ни менее точно.

8
задан Gromy 10 September 2015 в 14:19
поделиться

3 ответа

После нескольких дней осмотров и множества поисков я нашел решение своей проблемы

После того, как все проверки были выполнены, присвоено старое значение и обновлено свойство зависимости, мне нужно вызвать UpdateTarget ( ), чтобы обновить значение в моем текстовом поле.

Это то, что лучше объясняет решение

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/c404360c-8e31- 4a85-9762-0324ed8812ef /

8
ответ дан 5 December 2019 в 19:00
поделиться

Анураг,

Я должен сделать много предположений, но я попробую.

У вас наверняка есть что-то вроде этого ...

// ...
public static string GetValue(Dependency obj)
{
   // ...
}

// ...
public static void SetValue(DependencyObject obj, string value)
{
    // ...
}

// Using a DependencyProperty as the backing store for Value.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty ValueProperty =
    DependencyProperty.RegisterAttached("Value", typeof(string), typeof(MyCustomControl), new UIPropertyMetadata(OnValuePropertyChanged));

public static void OnValuePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
    string newValue = e.NewValue as string;

    // You validate your value here,
    // Then if fails, revert to old value.
    if(!SomeCondtion(newValue)) SetValue(obj,e.OldValue as string);

}

] Это определенно не лучший подход для проверки данных. Есть и другие, более эффективные подходы, которые дадут вам большую гибкость.

  1. Примените ValidationRule к своему TexBox. Это моя первая рекомендация, потому что она даст вам возможность контролировать отображение ошибки в случае сбоя проверки. Если вам нужна простая проверка, посмотрите мою статью .
  2. Прослушайте событие TextBox.TextChanged. Это громоздко и не может быть повторно использовано в большинстве случаев взломано.
  3. Не используйте метод обратного вызова DependcyPropertyChanged. Используйте зарегистрированное свойство строки и в своем сеттере примените логику, например частная строка _oldValue; общедоступная строка Значение { получить {вернуть GetValue (ValueProperty) как строку; } установлен { // Проверяем, соответствует ли значение вашей логике проверки если (SomeCondtion (значение)) { // Если да, то установите значение и запишите старое значение. SetValue (ValueProperty, значение); _oldValue = значение; } еще { // Иначе логика не работает, установите старое значение. SetValue (ValueProperty, _oldValue); } // Реализуем INotifyPropertyChanged для обновления TextBox. если (PropertyChanged! = ноль) PropertyChanged (это, новый PropertyChangedEventArgs («Значение»)); } }

Еще раз, как вы можете видеть из моего ответа, вы все равно можете показывать код в своем вопросе, чтобы помочь другим ответить на ваш вопрос, независимо от того, насколько сложным может быть ваше решение (если вы хотите получить хороший ответ, вам нужно указать попытка задать хороший вопрос). Мой ответ может не сработать для вас, но, возможно, он может дать вам несколько советов по поиску в Google. Надеюсь, это поможет.

0
ответ дан 5 December 2019 в 19:00
поделиться

Похоже, вы нарушаете привязку, когда устанавливаете значение свойства непосредственно из кода.

Вы не должны изменять свойство таким образом. Используйте механизм приведения значений и проверьте ввод в обратном вызове значения Coerce.

0
ответ дан 5 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: