Сохранять контроль и данные в Silverlight слабо связанными? - PullRequest
1 голос
/ 01 ноября 2011

У меня есть отдельная библиотека (Controls.DLL) с моими пользовательскими элементами управления.У меня есть другая библиотека (Model.dll) с моим кодом доступа к данным.

Некоторым элементам управления необходим доступ к данным.Я бы хотел, чтобы эти библиотеки были слабо связаны.По сути, я хотел бы получить доступ к данным без ссылки на Model.dll

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

Например, у меня есть класс Customer со свойствами, такими как «FirstName», «LastName» и т. Д. Но я хочу, чтобы они отображались внутри моего элемента управления с такими надписями, как «Имя», «Фамилия».Это примитивный пример, но он как бы показывает мою точку зрения.

Моя другая идея заключалась в том, чтобы иметь «провайдеров» на стороне данных, которые выплевывали бы XML, а на стороне контроля я буду анализировать этот XML.Но как мне перейти к методам?

Другая идея - идти с отражением.Таким образом, я бы просто передал объект в Control.Но я не так хорош в рефлексии и не уверен, что смогу достичь таких вещей, как: получение свойств / атрибутов.Получение и выполнение методов?Это звучит как идеальная вещь для кодирования с интерфейсами, но интерфейс должен где-то жить, и поэтому что-то должно ссылаться на что-то.

Итак, каков лучший способ свободно кодировать, как это?

1 Ответ

1 голос
/ 01 ноября 2011

Проверьте шаблон MVVM (Model-View-ViewModel).

По сути, ViewModel оборачивает модель и предоставляет команды доступа к данным и манипуляции с данными пользовательскому интерфейсу (представлению) через привязки свойств.

Вы найдете кучу документации, учебников и т. Д., Выполнив поиск MVVM. Или ознакомьтесь с этим ответом StackOverflow , чтобы начать работу.

Обновление:

MVVM позволяет вам разделять пользовательские элементы управления и данные. Похоже, вы хотите динамически генерировать компоненты интерфейса на основе данных в вашей модели. Вы можете сделать это в MVVM (это, конечно, не единственный способ). Модель представления может динамически генерировать коллекции на основе модели. Модель представления может включать в себя методы преобразования необработанных данных для отображения данных. Это означает, что ни ваша модель, ни элементы управления (представление) не должны знать, как сделай это.

В зависимости от характера ваших данных, вы можете выбрать, чтобы "общие" модели представлений отражали имена свойств для процедурной генерации отображаемых имен (как в вашем примитивном примере), или вы можете написать конкретные модели представлений для конкретных данных в твоей модели. Это будет зависеть от характера ваших данных. В любом случае ваши пользовательские элементы управления (в представлении) остаются отделенными от модели.

Обновление 2:

Модели вашего вида не обязательно должны находиться в той же сборке, что и вид (элементы управления). Вы даже можете поместить их в третью сборку (как описано здесь ). Конечно, это побуждает вас более строго следовать MVVM и следить за тем, чтобы у вас не было зависимостей от ViewModel до View, но это хорошо. Есть еще несколько советов по вопросам, связанным с подключением видов для просмотра моделей, с которыми вы можете столкнуться здесь .

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