今、私の質問は、どのように私はこれらの進捗バーを更新することができますか?私はINotifyPropertyChangedについて何かを読んだことがありますが、これは正しい、そして唯一の方法ですか?
INotifyPropertyChangedインターフェイスは、クライアント(通常はバインディングクライアント)にプロパティ値が変更されたことを通知するために使用されます。そして私はそれを使ってBackgroundTransfersのProgressBarsを更新しています。続き
は主な手順は次のとおりです。
まず、MyClassのためにINotifyPropertyChangedインターフェイスを実装しています
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 :) –