Как показать четные / нечетные секунды с DispatcherTimer - PullRequest
0 голосов
/ 09 мая 2019

У меня есть два текстовых блока, которые показывают значение таймера, используя 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 Ответ

1 голос
/ 10 мая 2019

Полагаю, ваши секунды не превышают 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...