Dostępność paramaterów myszy w MVVM

0

Cześć, mam kod w XAML + code_behind i przerabiam go na MVVM. Utknąłem na zdarzeniach myszy. W code behind mogłem używać MouseButtonEventArgs do rozpoznania klikniętego elementu oraz pozycji myszy. Teraz gdy w MVVM chcę użyć ICommand nie wiem jak pobrać właśnie te parametry myszy.
Mam kod xaml:

<ItemsControl x:Name="ic_TaskList" ItemsSource="{Binding Path=TasksList}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Canvas.Top" Value="{Binding Path=Y_Position}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <!--PreviewMouseDown="sp1_PreviewMouseDown"
                    PreviewMouseMove="sp1_PreviewMouseMove"
                    PreviewMouseUp="sp1_PreviewMouseUp">-->
                <TextBox Margin="10" Text="{Binding Path=Name, Mode=OneWay}" />
	     		<TextBox Margin="10" Text="{Binding Path=Note, Mode=OneWay}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Moje pytanie:

  • jak się dostać do takich informacji jak e.Source czy e.GetPosition(), używając ICommand?
4

a do czego ci pozycja myszy? takie tematy jak drag'n'drop itp ogarnia się przez behaviory https://www.wpftutorial.net/Behaviors.html
Nie zawsze code behind się kłóci z mvvm, implementacja niektórych rzeczy jak np customowe interaktywne komponenty reagujące bardziej na input usera niż na dane biznesowe to mordęga i sztuka dla sztuki bez code behind. mvvm zostaw dla logiki biznesowej

możesz połączyć behavior z attached property żeby wystawić pozycję myszy do ICommand, ale to trochę dziwne - jeśli model ma znać pozycję myszy to coś jest nie tak, jak później użyć tego samego modelu w aplikacji bez gui? model powinien być niezależny od widoku

0

Faktycznie chcę wykonać drag'n'drop, ale chciałbym, aby przesuwany element (tu: item w ItemsControl) był fizycznie przesuwany i do tego właśnie potrzebuję informację o aktualnej pozycji kursora.
Dzięki za odpowiedź - obczaję sobie Behaviory;)

1

Przede wszystkim musisz pamiętać, że MVVM nie oznacza braku code behind. Code behind był, jest i zawsze będzie. Chodzi o to, żeby logikę biznesową przenieść do ViewModelu, żeby nie trzymać jej w code behind. W code behind możesz spokojnie trzymać wszystko i robić wszystko co związane z GUI. Nie bój się tego. Z code behind też zawsze możesz wywołać komendę z ViewModelu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1