现在的问题是,我怎样才能更新这些ProgressBars?我已阅读了关于INotifyPropertyChanged的一些信息,但这是否是唯一的方法?
INotifyPropertyChanged接口用于通知客户端,通常是绑定客户端,属性值已更改。我正在使用它来更新BackgroundTransfers的ProgressBars。
以下是主要步骤:
首先,实现INotifyPropertyChanged接口MyClass的:
public class MyClass : INotifyPropertyChanged
{
public DownloadOperation DownloadOperation { get; set; }
private int _progress;
public int Progress
{
get
{
return _progress;
}
set
{
_progress = value;
RaisePropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string name = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
二,进度的值绑定到进度财产XAML:
<ProgressBar Value="{Binding Progress}" Margin="0,5"></ProgressBar>
然后,使用Progress调用回调来更新后面代码中的进度:
Progress<DownloadOperation> progressCallback = new Progress<DownloadOperation>(DownloadProgress);
await download.AttachAsync().AsTask(cancelToken.Token, progressCallback);
private void DownloadProgress(DownloadOperation download)
{
try
{
MyClass myClass = myClasses.First(p => p.DownloadOperation == download);
myClass.Progress = (int)((download.Progress.BytesReceived * 100)/download.Progress.TotalBytesToReceive);
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
}
这里是整个BackgroundTransferDemo供您参考。
这工作完美,非常感谢你杰里! – andy
我的荣幸! andy :) –