How would one refactor the following event handler to fit in the ViewModel?
private void imgSkipBack_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
SetNewPlayerPosition(ViewModel.MovieElapsedTime.Subtract(Settings.SkipSeconds).TotalSeconds >= 0
? ViewModel.MovieElapsedTime.Subtract(Settings.SkipSeconds)
: new TimeSpan(0));
}
}
private void SetNewPlayerPosition(TimeSpan newPosition)
{
Player.Position = newPosition;
AlignTimersWithSource(Player.Position);
}
private void AlignTimersWithSource(TimeSpan currentPosition)
{
ViewModel.MovieLeftTime = Player.NaturalDuration.TimeSpan - currentPosition;
ViewModel.MovieElapsedTime = currentPosition;
}
Where the vm is declared as follows:
public class VideoPlayerViewModel : ViewModelBase
{
private TimeSpan _movieElapsedTime = default(TimeSpan);
public TimeSpan MovieElapsedTime
{
get => _movieElapsedTime;
set
{
if (value != _movieElapsedTime)
{
_movieElapsedTime = value;
OnPropertyChanged();
}
}
}
private TimeSpan _movieLeftTime = default(TimeSpan);
public TimeSpan MovieLeftTime
{
get => _movieLeftTime;
set
{
if (value != _movieLeftTime)
{
_movieLeftTime = value;
OnPropertyChanged();
}
}
}
}
I have tried using Commands, but they don't seems to offer any benefit besides actually following the MVVM pattern, this version actually added only extra code in the xaml to allow me to pass the EventArgs
as CommandParameter.