Я пытаюсь создать простую утилиту с калибром micro и wpf. Этот простой код:
public bool CanTransfer
{
get { return this.canTransfer; }
set
{
this.NotifyOfPropertyChange(() => this.CanTransfer);
this.canTransfer = value;
}
}
public void Transfer()
{
Task.Factory.StartNew(this.Process);
}
private void Process()
{
this.CanTransfer = false;
Thread.Sleep(5000);
this.CanTransfer = true;
}
Останавливает ли следующее: кнопка Transfer
, но я ожидаю, что она будет активирована через 5 секунд после того, что я делаю неправильно?
CanTransfer
эти строки в CanTransfer
setter - теперь вы сначала говорите, что что-то изменилось, пока оно на самом деле нет, и затем вы меняете его:
public bool CanTransfer
{
get { return this.canTransfer; }
set
{
this.canTransfer = value;
this.NotifyOfPropertyChange(() => this.CanTransfer);
}
}
Обычно я использую метод, например ChangeAndNotify<T>
(единственным раздражением является объявление поля), код можно увидеть здесь:
private bool _canTransfer;
public string CanTransfer
{
get { return _canTransfer; }
set
{
PropertyChanged.ChangeAndNotify(ref _canTransfer, value, () => CanTransfer);
}
}
Вам не хватает уведомления:
this.NotifyOfPropertyChange(() => this.CanTransfer);
Надеюсь, я правильно понял синтаксис, я печатаю по памяти. Это в основном говорит WPF "Эй, что-то изменилось, иди и посмотри на новое значение".