【发布时间】: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