【问题标题】:Listview of Stopwatch timespans - how to continue timers in UI秒表时间跨度的列表视图 - 如何在 UI 中继续计时器
【发布时间】:2021-02-10 17:55:12
【问题描述】:

我有一个活动列表视图,每个活动都包含从我的 MongoDB 集合中提取的时间跨度。在点击一个活动列表视图项目时,我启动我的秒表,将当前时间跨度添加到经过的时间,这工作正常。但是唯一的问题是,计时器不会继续在 UI 中运行,时间跨度只会在每次点击时更新到 UI。

您能否建议我应该如何根据每个点击的活动继续运行各个计时器?请参阅下面的列表视图和 Tapped Event 方法:

列表视图


 <ListView
                     x:Name="ActivitiesList"
                     SelectionMode="None"
                     CachingStrategy="RetainElement"
                     HasUnevenRows="True"                     
                     BackgroundColor="White"                    
                     IsPullToRefreshEnabled="True"
                     ItemsSource="{Binding UserActivitiesList }"
                     RefreshCommand="{Binding getUserActivities}"
                     IsRefreshing="{Binding IsBusy, Mode=OneWay}"                    
                     SeparatorVisibility="None"
                     RowHeight="70"                      
                    >
                    <ListView.ItemTemplate>
                        <DataTemplate >
                            <ViewCell
                                Height="60" Tapped="OnActivityTap"
                             > 
                                
                                <StackLayout>
                                    <Grid BackgroundColor="White" x:Name="activitiesGrid"
                                          HeightRequest="60" WidthRequest="600" Margin="20,0,20,0" >

                                        <Grid.RowDefinitions>                                                                                
                                            <RowDefinition Height="28"/>                                           
                                        </Grid.RowDefinitions>

                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="30*"/>
                                            <ColumnDefinition Width="25*"/>
                                            <ColumnDefinition Width="25*"/> 
                                            <ColumnDefinition Width="20*"/> 
                                        </Grid.ColumnDefinitions>

                                       <Label
                                            Grid.Row="0"                                                          
                                            Grid.Column="0"
                                            VerticalOptions="Start"
                                            FontAttributes="None"                                       
                                            Text="{Binding ActivityName}"
                                            Margin="0,0,0,0"
                                            TextColor="Black"                                            
                                            Padding="0,10,0,0"
                                            FontFamily="Hiragino Sans"
                                            FontSize="14"
                                            HeightRequest="53"
                                            BackgroundColor="White"
                                       />
                                        <Label
                                            Grid.Row="0"                                                          
                                            Grid.Column="1"
                                            VerticalOptions="Center"
                                            FontAttributes="None"                                       
                                            Text="{Binding ActivityDuration}"
                                            TextColor="Black"
                                            Margin="0, 0,0, 0"
                                            Padding="0,10,0,0"
                                            FontFamily="Hiragino Sans"
                                            FontSize="14"
                                            HeightRequest="53"
                                            BackgroundColor="White"
                                       />
                                        <Label
                                            Grid.Row="0"                                                          
                                            Grid.Column="2"
                                            VerticalOptions="Center"
                                            FontAttributes="None"                                       
                                            Text="{Binding ActivityGoalDuration}"
                                            TextColor="Black"
                                            Margin="0, 0,0, 0"
                                            Padding="10,10,0,0"
                                            FontFamily="Hiragino Sans"
                                            FontSize="14"
                                            HeightRequest="53"
                                            BackgroundColor="White"
                                       />                                        
                                         <Switch
                                            Grid.Row="0"                                                          
                                            Grid.Column="3"
                                            VerticalOptions="Center"                                                                                                                            
                                            HeightRequest="53"
                                            BackgroundColor="White"
                                            IsToggled="{Binding ActivityEnabled}"
                                            Toggled="activitySwitch_Toggled"
                                            HorizontalOptions="EndAndExpand"
                                            Margin="0,0,0,0"
                                       />
                                    </Grid>

                                </StackLayout>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>


事件

 public void OnActivityTap(object sender, EventArgs e)
        {
            var item = (ViewCell)sender;
            UserActivities.Activities myactivitiesModel = item.BindingContext as 
            UserActivities.Activities;

            if (myactivitiesModel == null)
            {return;}
            foreach (var x in ViewModel.UserActivitiesList) {
                if(x.ActivityName == myactivitiesModel.ActivityName) {
                    mystopwatch.Start();
                    TimeSpan ts = myactivitiesModel.ActivityDuration;
                    ts = mystopwatch.Elapsed + ts;
                    x.ActivityDuration = mystopwatch.Elapsed + ts;
                }
}


【问题讨论】:

  • 秒表旨在用作调试工具。改为用户 System.Timers.Timer。
  • 嗨 Jason,感谢您的帮助,但我无法使用计时器获取经过的时间 - 我试过:TimeSpan ts = myactivitiesModel.ActivityDuration; myTimer.Elapsed += OnTimedEvent; TimeSpan 测试 = myTimer.Elapsed.ToString; x.ActivityDuration += myTimer.ToString();但我得到的错误只能出现在左侧......对此有什么帮助吗??
  • 为 elapsed_time 创建一个属性并在每个计时器滴答时更新它
  • 抱歉,您能否展示一个示例解决方案,因为我还是新手...
  • @Avatar 我不知道这句话是什么意思 不过唯一的问题是,定时器不会继续在 UI 中运行,时间跨度只更新到 UI每次点击,您要更新 ActivityDuration 值还是其他值?

标签: listview xamarin timer countdown


【解决方案1】:

我的问题是这样解决的:

                    //Create a new stopwatch
                    mystopwatch = new Stopwatch();
                    
                    //Add the current duration
                    TimeSpan ts = mystopwatch.Elapsed + x.ActivityDuration;

                    //Start stopwatch
                    mystopwatch.Start();

                    Device.StartTimer(TimeSpan.FromSeconds(seconds), () =>
                    {                        
                        x.ActivityDuration = (mystopwatch.Elapsed + ts);
                        OnPropertyChanged("ActivityDuration");
                        return true;
                    }
                    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-22
    • 2020-08-16
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2023-02-15
    相关资源
    最近更新 更多