WPF MVVM binding multiple progress bar
Referring to screenshot below, I have the following view and viewmodel setup to represent progress bar download. When I add more than 1 downloads to this collection of downloads, it seems that download 1 will overwrite download 2's Progress() public property. 

Example below is download 1 is downloading 1MB it will finish first and compared with download 2 downloading 5MB. 
When download 1 finish, download 2 (hello2 example below) progress bar just stop there but the bytes are still being downloaded at background until 5MB is reached.

How can I change the code to ensure download 1 does not interfere with download 2's progress bar UI. I've tried modifying Progress() to private but then both progress bar UI is not shown
 

**View**

    <ItemsControl Name="MyItemsControl" ItemsSource="{Binding GameDownloads}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid  DockPanel.Dock="Right">
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="200" />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>

                        <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding GameName}" />
                        <ProgressBar Grid.Row="0" Grid.Column="1"  Minimum="0" Maximum="100" Value="{Binding Progress, Mode=OneWay}" />
                        <TextBlock Grid.Row="1" Grid.Column="1"  Text="{Binding StatusText}" />

                    </Grid>

                </DataTemplate>

            </ItemsControl.ItemTemplate>
        </ItemsControl>

      


**DownloadAppViewModel**

    Public Class DownloadAppViewModel
    Inherits ViewModelBase

    Private ReadOnly WC As WebClient
    Public Sub New(ByVal Name As String, ByVal URL As String, ByVal FileName As String)
        _gameName = Name
        WC = New WebClient
        AddHandler WC.DownloadFileCompleted, AddressOf DownloadCompleted
        AddHandler WC.DownloadProgressChanged, AddressOf DownloadProgressChanged
        WC.DownloadFileAsync(New Uri(URL), FileName)
    End Sub
    Private Sub DownloadCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)

    End Sub
    Private Sub DownloadProgressChanged(ByVal sender As [Object], ByVal e As DownloadProgressChangedEventArgs)
        If _totalSize = 0 Then
            _totalSize = e.TotalBytesToReceive
        End If
        DownloadedSize = e.BytesReceived
    End Sub

    Private _gameName As String

    Public Property GameName() As String
        Get
            Return _gameName
        End Get
        Set(ByVal value As String)
            _gameName = value
            Me.OnPropertyChanged("GameName")
        End Set
    End Property

    Public ReadOnly Property StatusText() As String
        Get
            If _downloadedSize < _totalSize Then
                Return String.Format("Downloading {0} MB of {1} MB", _downloadedSize, _totalSize)
            End If
            Return "Download completed"
        End Get
    End Property

    Private _totalSize As Long
    Private Property TotalSize() As Long
        Get
            Return _totalSize
        End Get
        Set(ByVal value As Long)
            _totalSize = value
            OnPropertyChanged("TotalSize")
            OnPropertyChanged("Progress")
            OnPropertyChanged("StatusText")
        End Set
    End Property

    Private _downloadedSize As Long
    Private Property DownloadedSize() As Long
        Get
            Return _downloadedSize
        End Get
        Set(ByVal value As Long)
            _downloadedSize = value
            OnPropertyChanged("DownloadedSize")
            OnPropertyChanged("Progress")
            OnPropertyChanged("StatusText")
        End Set
    End Property


    Public ReadOnly Property Progress() As Double
        Get
            If _totalSize <> 0 Then
                Return 100.0 * _downloadedSize / _totalSize
            Else
                Return 0.0
            End If

        End Get
     
    End Property

    End Class

![enter image description here][1]


  [1]: http://i.stack.imgur.com/xuy63.png
WPF MVVM binding multiple progress bar
===

Referring to screenshot below, I have the following view and viewmodel setup to represent progress bar download. When I add more than 1 downloads to this collection of downloads, it seems that download 1 will overwrite download 2's Progress() public property. 

Example below is download 1 is downloading 1MB it will finish first and compared with download 2 downloading 5MB. 
When download 1 finish, download 2 (hello2 example below) progress bar just stop there but the bytes are still being downloaded at background until 5MB is reached.

How can I change the code to ensure download 1 does not interfere with download 2's progress bar UI. I've tried modifying Progress() to private but then both progress bar UI is not shown
 

**View**

    <ItemsControl Name="MyItemsControl" ItemsSource="{Binding GameDownloads}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid  DockPanel.Dock="Right">
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="200" />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>

                        <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding GameName}" />
                        <ProgressBar Grid.Row="0" Grid.Column="1"  Minimum="0" Maximum="100" Value="{Binding Progress, Mode=OneWay}" />
                        <TextBlock Grid.Row="1" Grid.Column="1"  Text="{Binding StatusText}" />

                    </Grid>

                </DataTemplate>

            </ItemsControl.ItemTemplate>
        </ItemsControl>

      


**DownloadAppViewModel**

    Public Class DownloadAppViewModel
    Inherits ViewModelBase

    Private ReadOnly WC As WebClient
    Public Sub New(ByVal Name As String, ByVal URL As String, ByVal FileName As String)
        _gameName = Name
        WC = New WebClient
        AddHandler WC.DownloadFileCompleted, AddressOf DownloadCompleted
        AddHandler WC.DownloadProgressChanged, AddressOf DownloadProgressChanged
        WC.DownloadFileAsync(New Uri(URL), FileName)
    End Sub
    Private Sub DownloadCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)

    End Sub
    Private Sub DownloadProgressChanged(ByVal sender As [Object], ByVal e As DownloadProgressChangedEventArgs)
        If _totalSize = 0 Then
            _totalSize = e.TotalBytesToReceive
        End If
        DownloadedSize = e.BytesReceived
    End Sub

    Private _gameName As String

    Public Property GameName() As String
        Get
            Return _gameName
        End Get
        Set(ByVal value As String)
            _gameName = value
            Me.OnPropertyChanged("GameName")
        End Set
    End Property

    Public ReadOnly Property StatusText() As String
        Get
            If _downloadedSize < _totalSize Then
                Return String.Format("Downloading {0} MB of {1} MB", _downloadedSize, _totalSize)
            End If
            Return "Download completed"
        End Get
    End Property

    Private _totalSize As Long
    Private Property TotalSize() As Long
        Get
            Return _totalSize
        End Get
        Set(ByVal value As Long)
            _totalSize = value
            OnPropertyChanged("TotalSize")
            OnPropertyChanged("Progress")
            OnPropertyChanged("StatusText")
        End Set
    End Property

    Private _downloadedSize As Long
    Private Property DownloadedSize() As Long
        Get
            Return _downloadedSize
        End Get
        Set(ByVal value As Long)
            _downloadedSize = value
            OnPropertyChanged("DownloadedSize")
            OnPropertyChanged("Progress")
            OnPropertyChanged("StatusText")
        End Set
    End Property


    Public ReadOnly Property Progress() As Double
        Get
            If _totalSize <> 0 Then
                Return 100.0 * _downloadedSize / _totalSize
            Else
                Return 0.0
            End If

        End Get
     
    End Property

    End Class

![enter image description here][1]


  [1]: http://i.stack.imgur.com/xuy63.png