2010-11-18 3 views
1

У меня есть приложение WPF, которое в настоящее время полностью отключено от XAML. Все поля, datagrids все связаны с XAML с использованием объектов ObjectDataProviders. У меня есть DataAccessLayer (DAL), импортированный в проект. Запросы на получение данных с использованием ODP используются для отображения данных, все работают.Обновление базы данных непосредственно из XAML

Возможно ли выполнять вставки, обновления, удаления с использованием методов, которые существуют в моем DAL прямо из XAML? Я стараюсь избегать ЛЮБОГО кода, вообще говоря, чтобы пользовательский интерфейс был отдельным объектом. Я не могу найти четкие примеры с вставкой, обновлением, удалением по этому вопросу. Есть предположения?

ответ

2

Ни WPF, ни Xaml действительно не имеют понятия о вставках, обновлениях и удалениях. Связывание данных связано с объектами (или случайными XML). Как только изменения в пользовательском интерфейсе (например, пользователь, вводящий значение в TextBox), были перенесены в связанные объекты, выполняется привязка данных. Это зависит от вас, что вы делаете с данными.

Не то, чтобы это было препятствием для цели «без кода». Обычный подход заключается в добавлении слоя между вашим представлением (Xaml) и вашими объектами данных и привязке интерфейса к этому слою, а не к базовой модели домена. (Этот слой часто называют ViewModel, но вы также увидите его другими именами, такими как Presenter. И этот общий шаблон известен как «разделенная презентация».)

Способ включения действий без необходимости использования кода является использование команд. Ваш промежуточный уровень не просто раскрывает ориентированные на данные свойства. Он может выставлять свойства, содержащие команды, и вы можете привязывать эти команды к кнопкам, гиперссылкам или пунктам меню. Это не требует никакого кода - все это просто привязывающие выражения в Xaml. Но когда вы нажимаете кнопку, запускается соответствующий код обработчика в вашей модели viewmodel. (ICommand очень простой интерфейс для реализации. - кнопка будет просто вызвать Execute метод при нажатии и вы обычно предоставляют собственную реализацию - встроенный RoutedCommand и RoutedUICommand не подходят для этого сценария.)

А потом вы можете вставить/обновить/удалить/все, что сочтете нужным.