Синтаксис:
пустой сон (неподписанные секунды);
сон () приостанавливает выполнение за интервал (секунды). С вызовом для сна текущая программа приостановлена от выполнения за число секунд, определенных секундами аргумента. Интервал точен только к самой близкой сотой части секунды или с точностью часов операционной системы, какой бы ни менее точно.
После нескольких дней осмотров и множества поисков я нашел решение своей проблемы
После того, как все проверки были выполнены, присвоено старое значение и обновлено свойство зависимости, мне нужно вызвать UpdateTarget ( ), чтобы обновить значение в моем текстовом поле.
Это то, что лучше объясняет решение
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/c404360c-8e31- 4a85-9762-0324ed8812ef /
Анураг,
Я должен сделать много предположений, но я попробую.
У вас наверняка есть что-то вроде этого ...
// ...
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);
}
] Это определенно не лучший подход для проверки данных. Есть и другие, более эффективные подходы, которые дадут вам большую гибкость.
Не используйте метод обратного вызова DependcyPropertyChanged. Используйте зарегистрированное свойство строки и в своем сеттере примените логику, например частная строка _oldValue; общедоступная строка Значение { получить {вернуть GetValue (ValueProperty) как строку; } установлен { // Проверяем, соответствует ли значение вашей логике проверки если (SomeCondtion (значение)) { // Если да, то установите значение и запишите старое значение. SetValue (ValueProperty, значение); _oldValue = значение; } еще { // Иначе логика не работает, установите старое значение. SetValue (ValueProperty, _oldValue); } // Реализуем INotifyPropertyChanged для обновления TextBox. если (PropertyChanged! = ноль) PropertyChanged (это, новый PropertyChangedEventArgs («Значение»)); } }
Еще раз, как вы можете видеть из моего ответа, вы все равно можете показывать код в своем вопросе, чтобы помочь другим ответить на ваш вопрос, независимо от того, насколько сложным может быть ваше решение (если вы хотите получить хороший ответ, вам нужно указать попытка задать хороший вопрос). Мой ответ может не сработать для вас, но, возможно, он может дать вам несколько советов по поиску в Google. Надеюсь, это поможет.
Похоже, вы нарушаете привязку, когда устанавливаете значение свойства непосредственно из кода.
Вы не должны изменять свойство таким образом. Используйте механизм приведения значений и проверьте ввод в обратном вызове значения Coerce.