powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM и MouseDragElementBehavior
6 сообщений из 6, страница 1 из 1
MVVM и MouseDragElementBehavior
    #37686170
Гед
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, уважаемые.
Есть следующий код
XAML
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<Grid x:Name="LayoutRoot">
        <Canvas>
            <Rectangle x:Name="Graph" 
               Canvas.Left="{Binding XProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
               Width="200" Height="100" Fill="Black">
                <i:Interaction.Behaviors>
                    <il:MouseDragElementBehavior/>
                </i:Interaction.Behaviors>
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseRightButtonDown">
                        <cmd:EventToCommand Command="{Binding EditShapeCommand}"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Rectangle>
        </Canvas>
    </Grid>



код в ViewModel
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    public class ShellViewModel : ViewModelBase
    {

        public int XProperty { get; set; }

        private RelayCommand _editShapeCommand;

        public RelayCommand EditShapeCommand
        {
            get { return _editShapeCommand ?? (_editShapeCommand = new RelayCommand(EditShape)); }
        }

        private void EditShape()
        {
            XProperty = 0;
            RaisePropertyChanged("XProperty");
        }
        
        public ShellViewModel()
        {
            XProperty = 100;
        }
    }


А теперь вопрос. Можно ли, каким либо образом, используя паттерн MVVM отловить перемещение моего Rectangle, когда я его перетягиваю мышью по форме. Потому как оказалось, что Canvas.Left это не совсем то, что мне надо, так как позиция смещается относительно первоначального положения, а мое перетаскивание не учитывается. Или идти в cod behind и не кипятить мозг.
Конструктивную критику кода воспринимаю адекватно :).
...
Рейтинг: 0 / 0
MVVM и MouseDragElementBehavior
    #37686280
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гед,

авторМожно каким либо образом отловить перемещение моего Rectangle
можно:
1) когда обрабатываете MouseRightButtonDown выставляйте флаг о нажатии;
2) подписываете свой Rectanle на событие перемещения мыши (делаете методы обработки во ViewModel), там смотрим стоит ли флаг о нажатии кнопки мыши и делаем свои дела;
3) подписаться на событие MouseRightButtonUp выставлять флаг об отпускании кнопки, чтобы не получилась ситуация, нажали отпустили кнопку, начали вести мышу, а Rectangle послушно за ней :)
...
Рейтинг: 0 / 0
MVVM и MouseDragElementBehavior
    #37686338
Гед
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А каким образом можно получить текущие координаты Rectangle в форме? Или это только через позицию мыши.
...
Рейтинг: 0 / 0
MVVM и MouseDragElementBehavior
    #37686465
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гед,

позиция мыши + Canvas.Left/Canvas.Right
...
Рейтинг: 0 / 0
MVVM и MouseDragElementBehavior
    #37686510
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для MouseDragElementBehavior не нужен никакой код, перемещение делается на автомате.
Отслеживать изменения можно в сеттере свойства
...
Рейтинг: 0 / 0
MVVM и MouseDragElementBehavior
    #37686653
Гед
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо всем откликнувшимся, особенно SeVa.
Все действительно можно забиндить. Если кому интересно.
вот так можно узнать насколько переместили по оси Х.
Код: xml
1.
2.
3.
i:Interaction.Behaviors>
      <il:MouseDragElementBehavior X="{Binding XProperty, Mode=TwoWay}"/>
</i:Interaction.Behaviors


Также накопал, что можно использовать
Код: xml
1.
2.
3.
<Rectangle x:Name="Graph"
                       RenderTransform="{Binding MyTransform, Mode=TwoWay}"
                       Width="200" Height="100" Fill="Black" >


биндится к
Код: c#
1.
public Transform MyTransform { get; set; }


в MyTransform.Value.OffsetX хранится смещение элемента относительно начальной позиции, как я понял. Соответственно MyTransform = new TranslateTransform(0.0,0.0) вернет прямоугольник в начальную позицию.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM и MouseDragElementBehavior
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]