与 WPF 属性异步
本文关键字:异步 属性 WPF | 更新日期: 2023-09-27 18:36:40
我有一个这样的绑定属性:
public string MyPath
{
get { return _mypath; }
set
{
_mypath = value;
NotifyPropertyChanged(() => MyPath);
LoadSomeStuffFromMyPath(mypath)
}
}
我想让 LoadSomeStuffFromMyPath 异步,但我无法等待来自属性。有没有简单的方法可以做到这一点?
编辑:不止一个人说不要使用房产,所以我想大声疾呼。我正在使用 WPF,此属性绑定到 UI。我必须使用一个属性。
由于您想强制操作在完成之前不继续,因此我建议制作一种方法来处理加载和显示进度。
您可以在加载时使用单独的属性来禁用 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 反映操作正在运行(异步)并显示进度等。
也许你应该把这种逻辑移到一个方法上。您违反了使用属性的准则:
该操作比字段集慢几个数量级。 如果您甚至考虑提供异步版本的 操作避免阻塞线程,很可能 操作太贵了,不能成为财产。特别是操作 访问网络或文件系统(除了一次 初始化)很可能应该是方法,而不是属性。
http://msdn.microsoft.com/en-us/library/vstudio/ms229054(v=vs.100).aspx
编辑:我对 WPF 不是很有经验,但我认为这可能是绑定到方法而不是属性的一种方式:
将方法绑定到数据网格 WPF 中的列