4

C# と WPF で解決策を探しています。サーバーに複数のファイルをアップロードしようとしています。すべてのアップロードは、プログレスバー内のリストボックスに表示される必要があります。

プログレスバーとテキストブロックを含むWPFリストボックステンプレートがあります:

<ListBox Name="lbUploadList" HorizontalContentAlignment="Stretch" Margin="530,201.4,14.2,33.6" Grid.Row="1">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="100" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding File}" />
                <ProgressBar Grid.Column="1" Minimum="0" Maximum="100" Value="{Binding Percent}" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


public class UploadProgress
{
    public string File { get; set; }
    public int Percent { get; set; }
}

List<UploadProgress> uploads = new List<UploadProgress>();
uploads.Add(new UploadProgress() { File = "File.exe", Percent = 13 });
uploads.Add(new UploadProgress() { File = "test2.txt", Percent = 0 });
lbUploadList.ItemsSource = uploads;

このリストの進行状況バーを更新するにはどうすればよいですか?

誰かが正しい解決策を見つけるのを手伝ってくれますか? :)

4

2 に答える 2

0

UploadProgress-class はINotifyPropertyChangedを実装して、値が変更されたときにバインディングに通知する必要があります。

リスト内の UploadProgress-instance の Percent-value を変更して、対応する ProgressBars 値を変更するだけです。

次のように、Percentage 値を設定するメソッドを作成することもできます。

private void Upload(UploadProgress upload)
{
    byte[] uploadBytes = File.GetBytes(upload.File);
    step = 100/uploadBytes.Length;
    foreach (byte b in uploadBytes)
    {
         UploadByte(b);
         upload.Percent += step; //after you implemented INotifyPropertyChanged correctly this line will automatically update it's prograssbar.
    }
}

アップロードがどのように詳細に機能するかは本当にわかりません。したがって、この方法は、パーセンテージ値を処理する方法を示すためのものです。

于 2013-09-13T07:56:59.713 に答える