EventToReactiveCommandを使うとXAMLで任意のコントロールで発生したイベントからViewModelのReactiveCommadn(ICommand)を呼び出すことが出来るようです。
ファイル名:MainWindow.xaml
<Image Name="Image1" Source="...">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown">
<interactivity:EventToReactiveCommand Command="{Binding MouseDownCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
ファイル名:MainWindowViewModel.cs
var MouseDownCommand = new ReactiveCommand<MouseButtonEventArgs>()
.WithSubscribe<MouseButtonEventArgs>(
e =>{
if (e.ChangedButton == MouseButton.Left)
{
// 左ボタンが押された
}
});
サンプルはImageコントロールでマウスをボタンを押してMouseDownCommandを呼び出しているコードの抜粋になります。
XAML側で引数となるMouseButtonEventArgsが出てこないのが少し気になりますが、この引数はConverterを使って好みのクラスに変換し必要な情報だけViewModelに渡すようにすることも出来そうです。
コメント