List < & Gt; Does not update in DispatcherTimer

advertisements

I have a List with a string countdown and I want to update it with a DispatcherTimer every second.

Init (runs on windows loads)

tasks.Add(new Tasks()
{
    title = "Task 1",
    date = "14:30 17 Martie 2016",
    countdown = "1",
    timer = new TimeSpan(0, 15, 32)
});
tasks.Add(new Tasks()
{
    title = "Task 2",
    date = "14:30 17 Martie 2016",
    countdown = "2",
    timer = new TimeSpan(1, 10, 52)
});
listViewTasks.ItemsSource = tasks;

initCountdown();

Class

 public class Tasks
{
 public string title { get; set; }
 public string date { get; set; }
 public string countdown { get; set; }
 public TimeSpan timer { get; set; }
}

DispatcherTimer

public void initCountdown()
        {
string item = tasks[0].title;
_time = tasks[0].timer;
_timer = new DispatcherTimer(new TimeSpan(0, 0, 1), DispatcherPriority.Normal, delegate
{
    tasks[0].countdown = _time.ToString("c"); //this does not update
    if (_time == TimeSpan.Zero) _timer.Stop();
    _time = _time.Add(TimeSpan.FromSeconds(-1));
}, Application.Current.Dispatcher);

_timer.Start();
}

XAML

<ListView Margin="0,30,0,0" Name="listViewTasks">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="1*"/>
                    <ColumnDefinition Width="1*"/>
                </Grid.ColumnDefinitions>
                <StackPanel HorizontalAlignment="Left" Margin="0,0,50,0">
                    <TextBlock Text="{Binding title}" Cursor="Hand"/>
                    <TextBlock Text="{Binding date}" />
                </StackPanel>
                <StackPanel HorizontalAlignment="Right" Grid.Column="1">
                    <TextBlock  Text="{Binding countdown}" />
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

from outside the dispatcher I can update it but from inside is not working.

No exception and the ui does NOT update

I want to update the listview to show me the countdown from the timespan I add.


You have to implement INotifyPropertyChanged interface in your Tasks class and call the PropertyChanged event when countdown property changes