绑定多个下载进度

时间:2015-09-19 08:29:26

标签: c# xaml windows-phone-8.1 windows-phone

我在ObservableCollection中有一个DownloadOperation列表,该变量的属性为Progress.TotalBytesToReceive& Progress.BytesReceived。 当我试图将此属性绑定到max&进度条的值它给我绑定表达式错误属性没有找到。我绑定其他属性ResultFile.Name并成功。有没有办法解决这个问题?

更新:

我发现我需要使用转换器从进度中获取totalbytes值,但现在问题是值没有更新,并且似乎observablecollection不会监视字节接收值。

<ListView   DataContext="{Binding Download}"
            ItemsSource="{Binding}">
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="5">
                        <TextBlock Text="{Binding ResultFile.Name}"
                                   FontSize="20"
                                   Foreground="Black"/>
                        <ProgressBar Maximum="100"
                                     Value="{Binding Progress, Converter={StaticResource ByteReceivedConverter}}"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
 </ListView>

我将其作为viewmodel,activeDownloads包含可观察下载列表。

public ObservableCollection<DownloadOperation> activeDownloads = new ObservableCollection<DownloadOperation>();

我试图提取BytesReceived&amp;代码中的TotalBytesToReceive

        double received = 0;
        double total = 0;
        foreach (var item in activeDownloads)
        {
            received += item.Progress.BytesReceived;
            total += item.Progress.TotalBytesToReceive;

        }
        if (total != 0) { 
        var percentage = received / total * 100;

它没有任何问题,observablecollection也工作正常,当我添加下载它自动更改视图而不必手动更新datacontext,如果下载完成/删除相同的结果。但是,如果我直接将Progress.BytesReceived绑定到进度条值,它会给我路径错误,但我能够将它绑定到Progress属性。所以我创建了一个转换器来检索值。

这是我用来转换Progress属性的Convereter:

public class ByteReceivedConverter:IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,      string language)
    {
        BackgroundDownloadProgress bytes = (BackgroundDownloadProgress)value;
        if (bytes.TotalBytesToReceive != 0)
            return bytes.BytesReceived/bytes.TotalBytesToReceive*100;

        else return 0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

是否有可能使这个DownloadOperation具有对字节接收级别的可观察性?,因为我没有创建这个属性,我只是从meta中检索它。或者我做错了吗?因为现在我遇到的问题是视图不知道bytesreceived值是变化的。

如果不可能,我应该使用INotifyPropertyChanged实现另一个视图模型吗?

0 个答案:

没有答案