Tworzę UserControl w aplikacji UWP na wzorcu MVVM (moja pierwsza styczność ze wzorcem). Ta kontrolka wymaga pobrania pewnych danych, więc stworzyłem dla niej ViewModel i tam przesyłam dane z ViewModel rodzica. Problem polega na tym, że nie jestem w stanie zrobić wszystkiego, bo nie powinienem przesyłać obiektu z widoku do ViewModels, bo to zdaje się łamie zasady MVVM, a muszę zrealizować pewne zadanie i prawdopodobnie tego wymagam.

Poniżej mam fragment kodu z kontrolki. Kontrolka ma za zadanie manipulować obrazem wewnątrz podczas interakcji użytkownika. Prawie wszystko działa po związaniu widoku z jego modelem widoku. Niestety najprawdopodobniej muszę wykorzystać tę metodę https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.input.pointerroutedeventargs.getcurrentpoint dla elementu Image i podać go w argumencie by móc śledzić położenie obrazu podczas manipulacji. Wszystko działa jak go tam przekażę, obraz się przemieszcza w stosownych granicach, przybliżanie i oddalanie na punkt kursora, ale samo przekazywanie kontrolki łamie zasadę MVVM.

Moje pytania to:

Czy da się to w jakiś sposób obejść? Tzn. nie przesyłać obiektu do tej metody z linku tylko jakieś parametry z widoku przykładowo.

Czy ten sposób realizacji eventów w ViewModel w ogóle jest poprawny dla wzorca?

Dodam, że do działania w ViewModel komendy są w takiej formie:

RelayCommand<PointerRoutedEventArgs> PointerWheelChangedCommand

Po wywołaniu eventów dokonywane są zmiany w CompositeTransformProperties z przekazanego PointerRoutedEventArgs pobieram informacje.

Przykład ```

CompositeTransformProperties.TranslateX += deltaX;

Fragment widoku:

<Image
            DataContext="{Binding Source={StaticResource ViewModelLocator}, Path=ImagePreview}"
            Margin="50" 
            Source="{Binding Path=ImageSource}"
            Opacity="{Binding Path=Opacity, Mode=TwoWay}"
            HorizontalAlignment="Center" 
            IsTapEnabled="True"
            VerticalAlignment="Center"
            ManipulationMode="TranslateX, TranslateY, System">
            <interactivity:Interaction.Behaviors>
                <core:EventTriggerBehavior EventName="Tapped">
                    <core:InvokeCommandAction Command="{Binding Path=TappedCommand}" />
                </core:EventTriggerBehavior>
                <core:EventTriggerBehavior EventName="ManipulationStarted">
                    <core:InvokeCommandAction Command="{Binding Path=ManipulationStartedCommand}" />
                </core:EventTriggerBehavior>
                <core:EventTriggerBehavior EventName="ManipulationDelta">
                    <core:InvokeCommandAction Command="{Binding Path=ManipulationDeltaCommand}" />
                </core:EventTriggerBehavior>
                <core:EventTriggerBehavior EventName="PointerWheelChanged">
                    <core:InvokeCommandAction Command="{Binding Path=PointerWheelChangedCommand}" />
                </core:EventTriggerBehavior>
                <core:EventTriggerBehavior EventName="ManipulationCompleted">
                    <core:InvokeCommandAction Command="{Binding Path=ManipulationCompletedCommand}" />
                </core:EventTriggerBehavior>
            </interactivity:Interaction.Behaviors>
            <Image.RenderTransform>
                <CompositeTransform 
                    ScaleX="{Binding Path=CompositeTransformProperties.ScaleX, Mode=TwoWay}"
                    ScaleY="{Binding Path=CompositeTransformProperties.ScaleY, Mode=TwoWay}"
                    CenterX="{Binding Path=CompositeTransformProperties.CenterX, Mode=TwoWay}"
                    CenterY="{Binding Path=CompositeTransformProperties.CenterY, Mode=TwoWay}"
                    TranslateX="{Binding Path=CompositeTransformProperties.TranslateX, Mode=TwoWay}"
                    TranslateY="{Binding Path=CompositeTransformProperties.TranslateY, Mode=TwoWay}"                  
                    />
            </Image.RenderTransform>
        </Image>


Zastanawiam się czy w ogóle jest sens tworzenia ViewModel dla tego zadania i nie chlapnąć wszystkiego w klasie widoku.