получить обновленное время таймеров класса в коде позади - PullRequest
1 голос
/ 15 мая 2011

У меня есть класс MVC, где я наследую INotifyPropertyChanged

У меня есть таймер, в котором для изменения минут и секунд в camrol обновляется код OnPropertyChanged ( "Время"); например. это отлично работает для аналоговых часов при вращении трех стрелок. Однако я хочу сделать цифровые часы, рисуя их линии или переключая видимость в сегментах прямоугольника 7.

так, чтобы сделать это, я должен сделать это в коде позади. Поэтому мне нужно иметь доступ к тому времени, которое я создал в классе ClockViewModel: INotifyPropertyChanged Итак, из кода позади я хочу использовать это время для переключения видимости на прямоугольник или рисовать сегменты для отображения времени.

У меня есть аналоговые часы mvc, которые вращают стрелки при изменении свойства, но я не вижу, как переключать видимость таким же образом или рисовать / рисовать.

Итак, есть ли способ получить время от класса в коде? и или получить изменение свойства при изменении времени? или я должен сделать отдельный таймер не MVC в коде позади?

вот класс

class ClockViewModel : INotifyPropertyChanged
{




        public ClockViewModel()
        {
            _timer = new System.Timers.Timer(1000);
            _timer.Elapsed += _timer_Elapsed;
            _timer.Start();
        }

что я хочу сделать - это получить от класса постоянное время, запустить для него инструкцию switch, чтобы я мог переключать видимость в некоторых строках, чтобы показать время. Или просто нарисуйте соответствующие линии соответственно.

Я могу привязать текстовый блок к OnPropertyChanged ("DigitalTime"); отображать время в цифровом виде, однако это побеждает то, что я хочу сделать.

1 Ответ

0 голосов
/ 15 мая 2011

Для этого я бы добавил свойства в мою модель представления, которые определяли видимость для каждого отрезка линии.

Затем каждый получатель свойства вычислит, должна ли линия быть видимой, на основе отображаемого числа.

Теперь вы можете связать свойство Visibility каждой строки с соответствующим свойством в вашей модели представления ивызовите OnPropertyChanged ("") (с пустой строкой), чтобы поднять всех слушателей для вашей модели представления.

Простым улучшением было бы выделение пользовательского элемента управления, отображающего одну цифру в ваших цифровых часах.Затем вы можете повторно использовать этот элемент управления для каждой цифры, которую необходимо отобразить.

Редактировать:
Я не буду кодировать весь элемент управления для вас (для чего это нужно?)Позвольте мне привести пример.Я предполагаю, что у вас есть набор линейных элементов управления, возможно, в сетке или что-то в этом роде.Чтобы нарисовать число, вам нужно показать некоторые линии и скрыть другие.
Теперь вам нужны xaml и модель представления, которая предоставляет данные.

Ваш Xaml должен выглядеть примерно так:

<Line X1="10" X2="10" Y1="10" Y2="20" Visibility="{Binding Line1Visibility, Mode=OneWay}" />
<Line X1="10" X2="20" Y2="10" Y2="10" Visibility="{Binding Line2Visibility, Mode=OneWay}" />
.... and so on

Вам нужно определить все строки, но вам не нужно называть их.Не используйте мои значения X и Y.Они только для примера.Также обратите внимание на привязку для Visibilily.Это односторонний процесс, поскольку мы не хотим устанавливать его из-под нашего контроля.

Теперь вам нужна модель вашего вида.Он должен определять свойства для всех видов и свойство, в котором вы устанавливаете число для отображения.Это должно быть что-то вроде этого:

public class DigitalNumberViewModel : INotifyPropertyChanged
{
  private int _numberToDisplay;
  public int NumberToDisplay
  { 
    get { return _numberToDisplay; }
    set 
    {
        _numberToDisplay = value;
        OnPropertyChanged("");
    }
  }

  public Visibility Line1Visibility 
  {
    get 
    {
      switch (NumberToDisplay)
      {
        case 0:
          return Visibility.Visible;
        case 1:
          return Visibility.Hidden;
        //... and so on
      }
    }
  }

  public Visibility Line2Visibility
  { .... }

  // ... and so on

}

Теперь у вас есть модель представления, которая определяет видимость для всех линий, и свойство, которое вы можете установить, которое будет вызывать событие измененного свойства для всех свойств в вашем представлении.модель.Вы должны быть в состоянии заполнить все остальное самостоятельно.: -)

Удачи!

...