Рекомендации WPF по привязке данных XML: XmlDataPresenter против пользовательского класса? - PullRequest
0 голосов
/ 21 января 2010

Я только начинаю в WPF и создаю простую библиотеку фильмов в качестве тестового проекта, чтобы помочь мне найти ноги.

Я храню информацию о фильме в формате XML, например:

  <movie id="1" title="Back To The Future" date="1985" ... />

Фильмы появляются в списке, и при нажатии поля становятся редактируемыми. Я получил это, работая с двумя шаблонами данных для стилизации элементов списка, примененных с помощью триггера к свойству ListBoxItem.IsSelected.

Но за привязку и редактирование данных я был бы очень благодарен за некоторые советы. Я попробовал каждый из подходов ниже с различной степенью успеха. Как вы думаете, в чем смысл? Могу ли я попробовать что-нибудь еще?

Подход 1. Привязка к XML напрямую с использованием XMLDataProvider в XAML. В этом случае ListBox связывается с XmlDataProvider, а отдельные элементы управления связываются с помощью выражений XPath. Начать очень просто, но этот подход кажется сложным при редактировании данных. Нам нужно довольно много ValueConverters только для того, чтобы обеспечить правильное представление данных и их сохранение в файле XML в соответствующем формате.

Подход 2: Создайте собственный класс Movie, который получает XML и предоставляет все атрибуты фильма в качестве открытых свойств, к которым привязаны элементы управления. Это кажется более надежным и гибким, но, похоже, требует гораздо больше работы для реализации. Каждое свойство должно быть явно отображено в коде, и проверка - это боль.

Подход 3: немного похож на подход 2, но с пользовательским элементом управления Movie вместо ListBox + Шаблоны данных. Я начал с этого и быстро отказался от него, потому что не видел никаких преимуществ перед подходом 2.

Я понимаю, что это не простой вопрос и что нужно учитывать множество факторов, но любые мысли о различных плюсах / минусах (или о том, есть ли какие-то уловки, которые я пропускаю), будут оценены. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или примеры кода. И извинения, если этот вопрос неуместен или нежелателен.

Большое спасибо.

1 Ответ

0 голосов
/ 21 января 2010

Если это просто для отображения, используете ли вы шаблоны или нет, подход один более эффективен, так как механизм wpf работает напрямую с xml.

Если вы собираетесь выполнять операции редактирования данных, лучше всего использовать второй подход, поскольку у вас есть гибкость, позволяющая намного лучше манипулировать данными. Используя класс, вы можете сделать то же самое, что и в подходе с привязкой, так как движок будет считывать объекты точно так же, как файл xml. Этот подход позволяет легко связать элементы 2 способом, и если он из коллекции IObservable, вы можете переопределить метод, который вызывается при изменении данных, поэтому он обновляет XML.

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