2016-06-02 2 views
1

Я использую контроль Mahapp TimePicker, я определяю его следующим образом:TimePicker потерял Binding

<Controls:TimePicker Culture="it-IT" Width="200" Controls:TextBoxHelper.Watermark="Start pause" SelectedTime="{Binding Stop, IsAsync=True, UpdateSourceTrigger=PropertyChanged}"/> 

и это свойство для привязки значение:

private TimeSpan? _stop; 
public TimeSpan? Stop 
{ 
     get { return _stop; } 
     set 
     { 
      _stop = value; 
      OnPropertyChanged(); 
     } 
} 

это мой OnPropertyChanged(); реализация:

public new event PropertyChangedEventHandler PropertyChanged; 

protected new virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
{ 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
} 

Это ситуация: когда я изменить значение на Contr ol это не выполняет привязку, это происходит только в первый раз, во второй раз, когда я выполняю привязку, значение берется правильно. Если я поставил точку останова как на get, так и на set вместо этого, кажется, что привязка выполняется правильно. Я не знаю, что это.

+0

удалить «IsAsync» –

+0

@ManfredRadlwimmer Wow! Работаю, но почему с isAsync нет? Не могли бы вы рассказать мне? – Heisenberg

ответ

2

Удалить IsAsync = true. IsAsync следует использовать только тогда, когда ожидается, что ваш геттер вернет результат с заметной задержкой. Или, как полагает Microsoft:

Использование свойства IsAsync, когда свойство get accessor источника привязки источника может занять много времени. Одним из примеров является свойство изображения с получателем доступа, который загружается из Интернета. Установка IsAsync в true позволяет избежать блокировки пользовательского интерфейса во время загрузки.

Таким образом, гейтер выполняется в другом потоке и возвращает значение привязке после его завершения. Не знаю, как WPF на самом деле обрабатывает сеттеры с IsAsync, может быть, кто-то еще может добавить эту часть.

+0

очень интересный ответ, спасибо – Heisenberg

+0

@Heisenberg Если вы действительно хотите поведение 'async', тогда создайте« Задачу »в конце кода и после завершения напишите значение в свойство bound. –

Смежные вопросы