我有这样的绑定属性:
public string MyPath
{
get { return _mypath; }
set
{
_mypath = value;
NotifyPropertyChanged(() => MyPath);
LoadSomeStuffFromMyPath(mypath)
}
}
我想让make LoadSomeStuffFromMyPath异步,但我无法等待来自属性。有一种简单的方法可以做到这一点吗?
编辑:不止一个人说不要使用房产,所以我想把它叫出来。我正在使用WPF,这个属性绑定到UI。我必须使用一个属性。答案 0 :(得分:9)
由于您希望在完成操作之前强制操作不继续,因此我建议您使用方法来处理加载和显示进度。
您可以使用单独的属性来加载UI,这可以有效地“阻止”您的用户,直到操作完成:
public string MyPath
{
get { return _mypath; }
set
{
_myPath = value;
NotifyPropertyChanged(() => MyPath);
UpdateMyPathAsync();
}
}
public async Task UpdateMyPathAsync()
{
this.EnableUI = false; // Stop user from setting path again....
await LoadSomeStuffFromMyPathAsync(MyPath);
this.EnableUI = true;
}
这允许您像往常一样使用WPF绑定,但让您的UI反映操作正在运行(异步)并显示进度等。
答案 1 :(得分:0)
也许您应该将这种逻辑移到方法中。您违反了使用属性的准则:
操作比字段集慢几个数量级。 如果你甚至考虑提供一个异步版本 操作,以避免阻塞线程,很可能是 操作太昂贵,不能成为财产。特别是运营 访问网络或文件系统(除了一次 初始化)应该很可能是方法,而不是属性。
http://msdn.microsoft.com/en-us/library/vstudio/ms229054(v=vs.100).aspx
修改强>: 我对WPF不是很有经验,但我认为这可能是一种绑定方法而不是属性的方法: