Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

</UserControl>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top