ViewModelに収まるように、次のイベントハンドラをどのようにリファクタリングしますか?私はコマンドを使用して試してみましたが、彼らは実際にMVVMパターンを次のように加えて任意の利点を提供しているようだしないでください、このバージョンは実際にのみ追加WPVMアプリケーションでMVVMパターンを実装する方法
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();
}
}
}
}
を次のようにVMが宣言されている
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;
}
xamlの余分なコードは、EventArgs
をCommandParameterとして渡すことができます。
@MickyDそれが聞こえるようになったらごめんなさい、このコードをリファクタリングする方法を探しています。私は問題を解決しようとしたことを人々に知らせることにしました。 – Deadzone
最高であなたの質問は広すぎます。しかし、典型的には、 'ICommand'を' Button.Command'プロパティにバインドして使用します。 'Click'の代わりに' MouseDown'イベントを処理することさえ少し奇妙です。どのような_客観的な方法であなたが 'ICommand'を見つけたのか、あなたが提供していないことが何を求めているのかを説明してください。 –
@PeterDuniho私はボタンを使用していないので、私は「クリック」をキャプチャしていない、私は使用している画像、ICommandのバージョン下位を見つける理由は、xaml、パラメータとして渡されたイベント引数を取得することができます。それ以外には、それは良いようです。 – Deadzone