Как я могу получить время после подсчета в течение 5 минут в форме xamarin
Я хочу попробовать сделать привязку Время2 показывают время после моего счетчика таймера в 5 минут, а теперь не знаю как его получить
Пример : время шоу 10.45 утра после того, как я нажмите кнопку Пуск и таймер закончил отсчет Время2 шоу 10.50 утра.
Не могли бы вы помочь мне, как его получить ?
Это мое кодирование:
MainViewModel.в CS
using GalaSoft.MvvmLight; using System; using System.Collections.Generic; using System.Text; using timer.Helpers; using Xamarin.Forms; namespace timer.ViewModel { public class MainViewModel : ViewModelBase { private Timer _timer; private TimeSpan _totalSeconds = new TimeSpan(0, 0, 5, 00); public TimeSpan TotalSeconds { get { return _totalSeconds; } set { Set(ref _totalSeconds, value); } } public Command StartCommand { get; set; } public Command PauseCommand { get; set; } public Command StopCommand { get; set; } public string Time { get; } public string Time2 { get; set; } public MainViewModel() { StartCommand = new Command(StartTimerCommand); PauseCommand = new Command(PauseTimerCommand); StopCommand = new Command(StopTimerCommand); Time = DateTime.Now.ToString("hh:mm tt"); Time2 = DateTime.Now.ToString("hh:mm tt"); _timer = new Timer(TimeSpan.FromSeconds(1), CountDown); TotalSeconds = _totalSeconds; } private void StartTimerCommand() { _timer.Start(); } private void CountDown() { if(_totalSeconds.TotalSeconds == 0) { StopTimerCommand(); } else { TotalSeconds = _totalSeconds.Subtract(new TimeSpan(0, 0, 0, 1)); } } private void PauseTimerCommand() { _timer.Stop(); } private void StopTimerCommand() { TotalSeconds = new TimeSpan(0, 0, 0, 1); _timer.Stop(); } } }
Таймер.в CS
using System; using System.Collections.Generic; using System.Text; using System.Threading; using Xamarin.Forms; namespace timer.Helpers { public class Timer { private readonly TimeSpan _timespan; private readonly Action _callback; private static CancellationTokenSource _cancellationTokenSource; public Timer(TimeSpan timeSpan, Action callback) { _timespan = timeSpan; _callback = callback; _cancellationTokenSource = new CancellationTokenSource(); } public void Start() { CancellationTokenSource cts = _cancellationTokenSource; Device.StartTimer(_timespan, () => { if (cts.IsCancellationRequested) { return false; } _callback.Invoke(); return true; }); } public void Stop() { Interlocked.Exchange(ref _cancellationTokenSource, new CancellationTokenSource()).Cancel(); } } }
Файл MainPage.язык XAML
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:viewModel="clr-namespace:timer.ViewModel;assembly=timer" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="timer.MainPage"> <ContentPage.BindingContext> <viewModel:MainViewModel></viewModel:MainViewModel> </ContentPage.BindingContext> <ContentPage.Content> <StackLayout Orientation="Vertical"> <Label Text="{Binding TotalSeconds, StringFormat='{0:mm\\:ss}'}" HorizontalOptions="CenterAndExpand" FontAttributes="Bold" FontSize="20" TextColor="Black"></Label> <Button Text="Start" Command="{Binding StartCommand}" FontSize="20"></Button> <Button Text="Pause" Command="{Binding PauseCommand}" FontSize="20"></Button> <Button Text="Stop" Command="{Binding StopCommand}" FontSize="20"></Button> <Label Text="{Binding Time}" FontSize="20"></Label> <Label Text="{Binding Time2}" FontSize="20"></Label> </StackLayout> </ContentPage.Content> </ContentPage>
Что я уже пробовал:
Я пытаюсь привязать Time2 в MainViewModel в методе private void StartTimerCommand но ничего не происходит