MVVM Как связать MouseLeftButtonDown и MouseLeftButtonUp в Canvas - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь добавить нового ребенка (круг) в свой холст после того, как пользователь щелкнет по нему.И я хочу изменить положение кругов, перетаскивая их.Я хочу сделать это с MVVM, но не знаю, как ловить эти события во ViewModel.Мне нужен MouseLeftButtonUp / Down

Я пробовал использовать System.Windows.Interactivity, но это не помогло.Моя единственная идея - добавить невидимую кнопку и выполнить легкое связывание Command="{Binding Method}", но это все равно не решит мою проблему, и, конечно, это не лучший вариант

Это в моем коде XAML (часть)

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

        <Canvas x:Name="DrawableCanvas" HorizontalAlignment="Left" Height="{Binding ElementName=GridContainer, Path=ActualHeight}"  VerticalAlignment="Top" Width="{Binding ElementName=GridContainer, Path=ActualWidth}" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown">
                    <i:InvokeCommandAction Command="{Binding CanvasActionCommand}" x:Name="interactifityFix2">
                    </i:InvokeCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Canvas>

1 Ответ

0 голосов
/ 14 февраля 2019

Добавьте это пространство имен в свой XAML:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

, затем вы можете добавить триггер взаимодействия, который объединит событие с icommand в вашей viemodel следующим образом:

 <Ellipse>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="PreviewMouseDown">
            <i:InvokeCommandAction Command="{Binding MouseDownCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Ellipse>
...