Использование команды вместо события. Команда найдет свойство ICommand с соответствующим именем в ViewModel. Это разделит ваш View и Code-behind.
В xaml
<Button Command="ChangeColorCommand" />
В ViewModel Примечание: timer
равно System.Timers.Timer
. Я пропустил его экземплярный код.
TimerTicked
вызывается, когда timer
Elapsed.
Вам не нужно использовать DispatcherTimer
, потому что StatusText
и StatusColor
не являются пользовательским интерфейсом object.
public ICommand ChangeColorCommand
{
get
{
return new RelayCommand( ChangeColorAndMessage );
}
}
// This is your view model constructor
private void ViewModelCtor(){
// your initialize code here
//subscribe event once
timer = new Timer();
timer.Interval=1000;
timer.AutoReset=false;
timer.Elapsed += TimerTicked;
}
public void ChangeColorAndMessage( string[] args )
{
StatusText = "Button pressed";
StatusColor = changedColor;
// You implementation for changing it back.
timer.Enabled = true;
}
private void TimerTicked( object sender, EventArgs e )
{
StatusText = "origin";
StatusColor = originColor;
// Fire property changed to notify view updating data.
PropertyChanged( this, new PropertyChangedEventArgs( StatusText ) );
PropertyChanged( this, new PropertyChangedEventArgs( StatusColor ) );
}
Для реализации RelayCommand, обратитесь к этому post