Передача (с помощью команды) WPF mvvm и получение параметров событий и событий между параметрами view и viewmodel - PullRequest
1 голос
/ 13 июня 2011

У меня есть следующий код, который обрабатывает событие перетаскивания мыши, генерируемое управлением большого пальца.Он отлично работает со стандартным кодом, таким как SettingView.xaml и SettingView.xaml.cs

, но как мне справиться с этим в моем файле SettingViewModel.cs.

До сих пор мне удавалось связывать клики с помощью DelegateCommand (или RelayCommand), который принимает параметр, но как мне получить входные данные от параметров, которые отправляются событиями?Например, событие перетаскивания предоставляет аргументы событий e.HorizontChange и e.VerticalChange.Пожалуйста, посмотрите, что прототип моего кода ниже.

Любое элегантное решение высоко ценится.

Заранее спасибо.

================================================================================== SettingView.xaml

Thumb Name = "thumbWest" DragDelta = "thumbWest_DragDelta

SettingView.xaml.cs

    private void thumbWest_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
    {
        _captureMargin.Left = _captureMargin.Left + e.HorizontalChange;

        if (e.HorizontalChange < 0)
        {
            // Drag towards West
            _widthRect = _widthRect + Math.Abs(e.HorizontalChange);
        }

        if (e.HorizontalChange > 0)
        {
            // Drag towards East
            _widthRect = _widthRect - e.HorizontalChange;
        }

}

1 Ответ

1 голос
/ 14 июня 2011

MVVM говорит об избавлении от кода, напрямую связывая Команду, объявленную в ViewModel, с View.Это хорошо работает для элементов управления, таких как Button, которые имеют свойство ICommand, где вы можете связать команду.Но во всех других ситуациях, когда элемент управления не предоставляет ICommand или если мы хотим определенного поведения для событий perticualr, я использую один из этих двух подходов:

1 - если я хочу простой подход, я определяю событиеобработчик и вызовите команду ViewModel (RelayCommand) из обработчика события, который конкретный параметр.В вашем случае код будет выглядеть так:

private void thumbWest_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
   viewModel.DoSomthingCommand.Execute(new DoSomethingCommandParam(e.HorizontalChange))
}

Хотя мы добавляем код в код, я чувствую, что это нормально, поскольку мы не добавили никакой логики пользовательского интерфейса в четный обработчик.Это только выполнение Команды в ViewModel с надлежащими параметрами.

2 - Если я полностью против размещения какого-либо кода в коде, я создам Прикрепленное поведение для обработки перетаскивания и присоединения к элементу управления.Затем вызовите команду ViewModel из присоединенного поведения.Вы можете найти хороший учебник по использованию Attached Behavior здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...