Привязка данных с Silverlight

Если я хочу привязать коллекцию к некоторой форме управления списком в Silverlight. Единственный способ сделать это - сделать так, чтобы базовые объекты в коллекции реализовали INotifyPropertyChanged и чтобы коллекция была Observablecollection?

Если бы я использовал какой-то сторонний объект, например, возвращаемый веб-службой, мне пришлось бы обернуть его или сопоставить с чем-то, что реализует INotifyPropertyChanged?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
337
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете привязать список к любой коллекции IEnumerable или простой элемент управления к любому свойству объекта. Обратной стороной является то, что вы не получаете уведомления об изменении, если элементы добавляются в список или свойства изменяются. Таким образом, это зависит от вашего приложения, если это проблема или нет.

Ответ принят как подходящий

Нет, как только вы добавите ссылку на сервис в свой проект silverlight в Visual Studio, вы можете щелкнуть его правой кнопкой мыши и настроить так, чтобы он использовал ObservableCollection (который в любом случае является настройкой по умолчанию)

Кроме того, ссылка на службу по умолчанию гарантирует, что типы, возвращаемые службой, уже реализуют INotifyPropertyChanged.

Как сказал Морис, вы можете выполнить привязку к любой коллекции (даже IEnumerable), и привязка будет работать, но вы не получите уведомлений об изменениях. Обратите внимание, однако, что вам не нужно использовать ObservableCollection, все, что реализует INotifyCollectionChanged, будет работать (хотя ObservableCollection является самым простым).

Объекты в коллекции не обязаны реализовывать INotifyPropertyChanged, но если они это сделают, вы будете получать уведомления о каждом отдельном изменении.

Чтобы было ясно, вы можете привязать Один раз к любому объекту. Если вы хотите связать Одностороннее движение или TwoWay, вам нужно, чтобы объект поддерживал один из этих интерфейсов. Как уже упоминалось, создание ссылки на службу делает это за вас для объектов, доставленных через веб-службу. Однако, если по какой-то причине вам все еще нужно создать объект Bindable из унаследованного класса, вы можете реализовать Converter, который реализует IValueConverter, а затем использовать его, чтобы «обернуть» свой устаревший объект в Bindable, живите вот так:

<UserControl>
    <UserControl.Resources>
        <local:FooToBindableFooConverter x:Key = "BindableFooConverter"/>
    </UserControl.Resources>
    <TextBlock Text = "{Binding FooInstance, Converter = {StaticResource BindableFooConverter}}"/>

</UserControl>

Конвертеры очень мощные и могут решить множество проблем типа «Мне нужен X, но у меня Y».

Другие вопросы по теме