Поддержка связывания данных в инструментах O / RM, как обнаружить - PullRequest
0 голосов
/ 15 июня 2009

Я хочу убедиться, что сгенерированный класс (отдельный объект или коллекция) из инструмента O / RM совместим с привязкой данных.

Я прочитал, что поддерживаемые типы привязки данных в WCF: один раз, один путь, два пути, один путь от источника в WCF. Но как насчет «старой школы» .NET 1.1 привязки данных?

Выглядит довольно сложно проверить в коде, какая поддержка связывания данных существует. У вас также есть разница в поддержке привязки данных времени выполнения и времени разработки. При чтении некоторых веб-страниц я читаю различные виды реализаций: реализовать IList, IComponent, INotifyPropertyChanged, IBindingList .... pffffff Я не знаю точно, где искать ...

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

Вы можете привязать данные практически к любому классу. Давайте представим, что вы создаете очень простой класс с несколькими свойствами, например, Person с именем и возрастом. Я говорю о простом классе, в котором нет ничего особенного.

Если вы создаете экземпляр Person, вы можете сделать с ним несколько вещей, и я предполагаю, что вы работаете с Windows Forms, но это в основном относится к другим средам: - Вы можете привязать его свойства к свойствам элементов управления. - Вы можете привязать его к сетям данных, спискам и т. Д. В первом случае вы можете установить сопоставления, какие свойства привязать к каким столбцам. В последнем случае, какое свойство отображается в списке, какое свойство является значением, выбранным пользователем. - Еще лучше, вы можете привязать его к источнику привязки.

Привязка отдельного экземпляра к сетке или списку не так уж полезна, поэтому обычно выполняется создание списка экземпляров и привязка их к сетке. Еще более правильным является привязка списка к источнику привязки, а также к сетке - к источнику привязки.

Вы можете посмотреть хорошую статью здесь о том, как все это сделать.

Теперь, о всех интерфейсах, которые вы упоминаете, все они только увеличивают ценность привязки данных. Давайте поговорим о некоторых из них.

  • INotifyPropertyChanged. Person не менее «привязан к данным», чем любой другой объект, если он не реализует этот интерфейс. Однако экземпляры Person не могут сделать это, уведомив элементы управления, их свойства которых связаны с тем, что последние изменились. Попробуйте это: Привязать свойство Name экземпляра Person к свойству Text TextBox. Создайте кнопку, которая при нажатии изменяет значение имени этого экземпляра. Вы увидите, что TextBox не обновляется после нажатия кнопки. Если, с другой стороны, вы реализуете INotifyPropertyChanged и у установщика свойства Name возникает свойство PropertyChangedEvent, определяемое интерфейсом, после повторения опыта вы увидите, что текстовое поле обновляется автоматически.

  • IEnumerable. Если вместо одного человека вы хотите привязать данные не к группе людей, вы можете создать список людей и привязать данные к этому списку. Давайте возьмем, к примеру, List lst = new List (); Как элементы управления привязкой данных, такие как datagrid, bindingSource и т. Д., Знают, что вы хотите связать с набором Person (ов), а не со свойствами самого lst? Это потому, что List реализует IEnumerable. Таким образом, всякий раз, когда вы связываете эти элементы управления с экземпляром чего-либо, реализующего IEnumerable, элементы управления знают, что вы намерены связывать не со свойствами списка, а с экземплярами, на которые ссылается список. Как они узнают, какой тип объектов содержится в списке? Чтобы быть более универсальными и поддерживать любой тип реализации IEnumerable, они просто проверяют тип первого элемента в списке и предполагают, что все остальные равны.

  • IBindingList: даже если Person реализует IPropertyChanged, если вы сгруппируете экземпляры Person в List, свяжете этот список с элементом управления и, по коду, измените значение свойства одного из экземпляров, вы ничего не увидите случиться на экране. Это происходит потому, что Person уведомляет не источник привязки, а список. Но список не был создан для привязки данных, поэтому он не прослушивает и не передает событие в элемент управления. Списки, которые реализуют IBindingList, такие как BindingList, предлагают лучшую поддержку привязки данных точно благодаря прослушиванию событий PropertyChangedEvent их содержимого и распространению их до элемента управления с привязкой к данным.

Я боюсь, что я не дал вам никакого способа определить, является ли объект доступным для данных, потому что практически все они есть, но я надеюсь, что я дал вам способ определить различные уровни поддержки привязки данных (INotifyPropertyChanged и IBindingList). Я предполагаю, что вы знаете, как проверить это с помощью отражения.

1 голос
/ 18 июня 2009

Любой экземпляр класса со свойствами привязывается к данным. (на самом деле экземпляры любого класса с полями или свойствами вообще могут быть привязаны к данным)

Использование отражения в .NET позволяет очень легко находить / использовать данные в объекте. (при небольших затратах на исполнение)

Чтобы ответить на этот вопрос , вам необходимо указать конкретные сценарии использования, с которыми вы столкнетесь.

Руи дает хорошее объяснение различных общих шаблонов привязки данных, но каждый из них предназначен для решения конкретных проблем.

Ответ вправо всегда зависит от контекста.

:)

...