Caliburn.Micro не обновляет интерфейс

1

Я пытаюсь создать простую утилиту с калибром 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 секунд после того, что я делаю неправильно?

  • 0
    Это выглядит немного расточительно, чтобы вынуть нитку из пула, чтобы она заснула на 5 секунд. Вы не можете вместо этого использовать таймер?
  • 1
    в моем приложении действительно много чего происходит, но вот упрощенный пример
Теги:
wpf
caliburn.micro

2 ответа

2
Лучший ответ

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

Вам не хватает уведомления:

this.NotifyOfPropertyChange(() => this.CanTransfer);

Надеюсь, я правильно понял синтаксис, я печатаю по памяти. Это в основном говорит WPF "Эй, что-то изменилось, иди и посмотри на новое значение".

  • 0
    Извините, обновленный текст вопроса. Уведомление находится в установщике свойства

Ещё вопросы

Сообщество Overcoder
Наверх
Меню