0

私のUWPアプリケーションでは、私は定義済みのItemTemplateを持つListViewを持っています。このテンプレートの中には、ProgressBarがあります。今私は複数のBackgroundTransfers(ダウンロード)を開始する場合、私はすべてのアクティブなダウンロードを取得し、ObservableCollection<MyClass>に追加し、私のListViewでItemsSourceとしてこのコレクションを設定します。今私の質問は、どのようにこれらのProgressBarsを更新できますか?私はINotifyPropertyChangedについて何かを読んだことがありますが、これは正しい、そして唯一の方法ですか?UWP ListView内で複数のProgressBarsを更新します

敬具

答えて

1

今、私の質問は、どのように私はこれらの進捗バーを更新することができますか?私は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があります。

+0

これは完璧に動作します、非常にジェリーありがとう! – andy

+0

私の喜び! andy :) –

関連する問題