如何使用DispatcherTimer显示偶数/奇数秒

时间:2019-05-09 13:53:24

标签: c# wpf xaml mvvm

我有两个文本块,它们使用DispatcherTimer显示计时器的值。 我需要每2秒更新一次它们的值,一个块只能显示偶数秒,另一个只能显示奇数秒。

enter image description here

查看

<Grid>
    <TextBlock Name="textTimeMiddle"
        Text="{Binding TestTimer.TimeFormat, UpdateSourceTrigger=PropertyChanged}"/>
    <TextBlock Name="textTimeBottom"
        Text="{Binding TestTimer.TimeFormat, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>

模型

public class TestTimer : INotifyPropertyChanged
{
    public TestTimer()
    {
        Timer = new DispatcherTimer();
        Timer.Interval = new TimeSpan(0, 0, 1);
        Timer.Tick += TimerTick;
        Timer.Start();       
    }

    private DispatcherTimer Timer;

    private string _timeFormat;
    public string TimeFormat
    {
        get { return _timeFormat; }
        set
        {
            _timeFormat = value;
            OnPropertyChanged();
        }
    }

    private int _seconds;
    public int Seconds
    {
        get { return _seconds; }
        set
        {
            if(value > -1 && value < 61)
            {
                _seconds = value;
                OnPropertyChanged();
            }
        }
    }

    private int _minutes;
    public int Minutes
    {
        get { return _minutes; }
        set
        {
            if (value > -1 && value < 61)
            {
                _minutes = value;
                OnPropertyChanged();
            }
        }
    }

    private int _hours;
    public int Hours
    {
        get { return _hours; }
        set
        {
            if (value > -1 && value < 25)
            {
                _hours = value;
                OnPropertyChanged();
            }
        }
    }

    private void TimerTick(object sender, EventArgs e)
    {
        if (Seconds > 59)
        {
            Seconds = 0;
            Minutes++;

            if (Minutes > 59)
            {
                Minutes = 0;
                Hours++;

                if (Hours > 23)
                    Hours = 0;
            }
        }
        Seconds++;
        TimeFormat = string.Format("{0:00}:{1:00}:{2:00}",
            Hours, Minutes, Seconds);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName]string prop = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
    }
}

1 个答案:

答案 0 :(得分:1)

我想您的秒数不超过60秒。所以这段代码应该可以工作。

 int i = 16;//your seconds number here in the place of i
    if (i % 2 == 0)
    {
        string eventextbox = i.ToString(); //your even numbers textbox.text
        //Console.Read();
        Console.WriteLine("even = " + eventextbox);
    }
    else
    {
        string oddtextbox = i.ToString();//Odd Number textbox.text
       // Console.Read();
        Console.WriteLine("odd = " + oddtextbox);
    }