Caliburn.Micro没有更新UI

时间:2014-08-12 12:48:03

标签: c# .net wpf caliburn.micro

我正在尝试使用caliburn 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秒后启用,我做错了什么?

2 个答案:

答案 0 :(得分:2)

CanTransfer setter方法中交换这些行 - 现在你首先说某些内容已经发生了变化,而实际上它已经没有了,然后你就改变了它:

public bool CanTransfer
{
    get { return this.canTransfer; }
    set
    {
        this.canTransfer = value;
        this.NotifyOfPropertyChange(() => this.CanTransfer);
    }
}

我通常使用像ChangeAndNotify<T>这样的方法(唯一的烦恼是字段的声明),可以看到代码here

private bool _canTransfer;
public string CanTransfer
{
  get { return _canTransfer; }
  set 
  { 
    PropertyChanged.ChangeAndNotify(ref _canTransfer, value, () => CanTransfer); 
  }
}

答案 1 :(得分:0)

您错过了通知:

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

我希望我的语法正确,我正在从内存中输入。 这基本上告诉WPF“嘿,事情发生了变化,去看看新的价值”。