ViewModel에 맞게 다음 이벤트 처리기를 리팩터링하는 방법은 무엇입니까? VM이로 선언WPF 응용 프로그램에서 MVVM 패턴 구현 메서드
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;
}
은 다음과 같습니다
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();
}
}
}
}
내가 명령을 사용하여 시도했다, 그러나 실제로 MVVM 패턴을 다음 외에 어떤 혜택을 제공 할 것없는,이 버전은 실제로에만 추가 xaml에서 여분의 코드를 사용하여 EventArgs
을 CommandParameter로 전달할 수 있습니다.
@MickyD 그것이 소리가 나는데 미안하다. 나는이 코드를 리펙토링하는 방법을 찾고있다. 나는 문제를 해결하려고 노력한 것을 사람들에게 알리기로 결정했다. – Deadzone
기껏해야 귀하의 질문이 너무 광범위합니다. 그러나 일반적으로'ICommand'는 이런 종류의 일에 대해'Button.Command' 속성에 묶여 있습니다. 'Click'대신에 'MouseDown' 이벤트를 처리하는 것조차 조금 이상합니다. 당신은 어떻게 당신이'ICommand'를 열등한 것으로 _ 객 체적으로 찾았는지, 그리고 당신이 제공하지 않는 것이 무엇인지를 설명합니다. –
@PeterDuniho 버튼을 사용하지 않아서 '클릭'을 캡처하지 않습니다. 사용하고있는 이미지입니다. ICommand 버전이 열등한 이유는 xaml에 쓸 필요가있는 모든 추가 코드 때문입니다. args가 매개 변수로 전달 된 이벤트를 가져올 수 있습니다. 게다가 그것은 괜찮아 보인다. – Deadzone