Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Runtime.CompilerServices;
- using System.Text;
- using System.Threading.Tasks;
- using System.Timers;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace WpfApp1
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- private CounterViewModel _counterViewModel = new CounterViewModel();
- public MainWindow()
- {
- InitializeComponent();
- DataContext = _counterViewModel;
- }
- private void Button_Click(object sender, RoutedEventArgs e)
- {
- _counterViewModel.Start();
- }
- public class CounterViewModel : INotifyPropertyChanged
- {
- public int SecToCount { get; set; }
- public DateTime FinishTime { get; set; }
- public TimeSpan Counter
- {
- get
- {
- if (!Enabled)
- return TimeSpan.Zero;
- var res = FinishTime -DateTime.Now;
- if(res <= TimeSpan.Zero)
- {
- Enabled = false;
- return TimeSpan.Zero;
- }
- return res;
- }
- }
- private bool _enabled;
- public bool Disabled => !Enabled;
- public bool Enabled
- {
- get => _enabled;
- set {
- if (value == _enabled)
- return;
- _enabled = value;
- _timer.Start();
- OnPropertyChanged();
- OnPropertyChanged(nameof(Disabled));
- }
- }
- private Timer _timer = new Timer
- {
- Interval = 1000
- };
- public event PropertyChangedEventHandler PropertyChanged;
- public CounterViewModel()
- {
- _timer.Elapsed += (sender, args) => OnPropertyChanged(nameof(Counter));
- }
- private void OnPropertyChanged([CallerMemberName] string memberName = "")
- {
- PropertyChanged?.Invoke(sender: this, new PropertyChangedEventArgs(memberName));
- }
- public void Start()
- {
- FinishTime = DateTime.Now.AddSeconds(SecToCount);
- Enabled = true;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement