Я создаю приложение Alarm на основе MVVM Light.
Основной функциональностью приложения является всплывающее сообщение о тревоге в определенное время.Я создал представление Alarm.xaml
, в котором я создаю и сохраняю задачи с сигналами тревоги, класс модели Task.cs
и класс модели представления AlarmViewModel.cs
.
Далее я создал таймер, который каждые полминуты проверяет текущее время по списку задач:
System.Timers.Timer timer;
//I am using Timer class on purpose because I want to have asynchronous behavior
private void InitTimer()
{
timer = new Timer(30000); //Check every 30 seconds
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(TimerElapsed);
timer.Start();
}
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
DateTime currentTime;
string message;
currentTime = e.SignalTime;
foreach (Task task in tasks)
{
if (task.AlarmTime.CompareTo(currentTime) <= 0)
{
message = string.Format("({0}) Task:\n{1}",
task.AlarmTime.ToString("dd/MMM/yy HH:mm"), task.Description);
//This message needs to pop up
}
}
}
У меня два вопроса:
- Во-первых, какое место лучше всего инициализировать и запустить таймер?Прямо сейчас два метода, написанные выше, находятся в классе
AlarmViewModel.cs
, но я намерен иметь более одного окна в моем приложении и, следовательно, больше моделей просмотра, и я хочу, чтобы мои проверки тревог происходили независимо от того, Alarm.xaml
окно открыто или нет.Мне нужно своего рода центральное место, чтобы таймер работал до тех пор, пока приложение работает. - Второй вопрос: как открыть обработчик событий
string message
из TimerElapsed
?Я хочу создать отдельное окно / элемент управления (и соответствующую модель представления), чтобы показать описание задачи.Но как мне заставить это окно / элемент управления появиться (т.е. всплывающее окно), если я управляю всем с уровня viewmodel?Как оркестровка окон?Viewmodel locator (компонент внутри MVVM)?Как?
Спасибо за помощь.Приветствия.