我正在尝试使用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秒后启用,我做错了什么?
答案 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“嘿,事情发生了变化,去看看新的价值”。