C#のWPFでMouseDownイベントとEventToReactiveCommand

C# コンピュータ
C#

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に渡すようにすることも出来そうです。

コメント