Может ли Telerik RADGridView использоваться без использования чисто MVVM-кода без какого-либо кода позади? - PullRequest
0 голосов
/ 21 июня 2011

Я использую элемент управления Telerik RADGridView и пытаюсь реализовать его в чистом виде MVVM.Я использую EventToCommand MVVMLight для передачи событий элемента управления в мою модель представления.

В частности, я пытаюсь обработать событие AddingNewDataItem.

Хотя PassEventArgsToCommand MVVMLight работает нормально, я не вносил никаких измененийк аргументу возвращаются обратно в элемент управления сеткой (в частности, параметр NewObject).Если я манипулирую NewObject в коде позади, все работает нормально.

Есть ли у кого-нибудь опыт заставить это работать?На данный момент, похоже, что Telerik только «своего рода» поддерживает MVVM, что вызывает сожаление.

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Наличие кода в выделенном фрагменте кода означает, что код отклоняется от шаблона MVVM.Вполне законно иметь код в выделенном коде, поскольку целью кода является манипулирование пользовательским интерфейсом и отсутствие ссылок на данные проблемной области.На самом деле было бы неправильно помещать манипуляции с пользовательским интерфейсом в ViewModel.

Не совсем точно, что именно вы пытаетесь выполнить, но если вы передаете ссылку на GridViewRowEditEndedEventArgs в вашу ViewModel, то есть вылетиз шаблона MVVM, потому что ViewModel теперь зависит от реализации View.

В шаблоне MVVM View «знает» о ViewModel, а ViewModel «знает» о модели.Но Модель не зависит от или не знает о ViewModel, и ViewModel не зависит или не знает о View.

Если вы передаете ссылку GridViewRowEditEndedEventArgs на ViewModel, проблема заключается в том, что если / когда вы меняетепредставление какого-либо другого элемента управления (например, RadListBox, элемента управления сеткой Infragistics или чего-либо еще), ваш ViewModel перестанет правильно функционировать.

Ваше утверждение, что:

Telerik поддерживает только «своего рода»MVVM

является несправедливым и неправильным.

Цель MVVM - не исключать код из выделенного кода.Это распространенное заблуждение.Цели MVVM состоят в том, чтобы повысить тестируемость и удалить логику предметной области и модели из кода как часть хорошей практики «разделения интересов».

Когда код выделенного кода просто перемещается в класс с именем SomethingSomethingViewModel.... это не MVVM.

0 голосов
/ 21 июня 2011

Эрик, я использую элемент управления Silverlight GridView с MVVMLight и смог заставить его работать успешно.

Я думаю, что ваша проблема может заключаться в понимании события AddingNewDataItem. Если вы посмотрите на документацию для Добавление новых записей , вы увидите, что

Элемент AddingNewDataItem поднимается до новая строка отображается. В случае обработчик вы инициализируете объект, который должен быть добавлен и передать его GridViewAddingNewEventArgs.

Получив инициализированный объект, вам нужно обработать событие RowEditEnded, чтобы зафиксировать или отменить внесенные изменения. Опять же, если вы посмотрите на документацию Telerik, вы увидите, что у вас есть доступ к объекту, созданному вами в событии AddingNewDataItem, через GridViewRowEditEndedEventArgs (e.NewData). Кроме того, когда новый элемент фиксируется, он будет автоматически добавлен в элементы RadGridView.

...