Как использовать двустороннюю привязку, если привязанный экземпляр не реализует INotifyPropertyChanged в Silverlight 2?

Я пытаюсь написать довольно простой пользовательский элемент управления в Silverlight 2, который позволяет пользователю искать существующие адреса, при необходимости обновлять выбранный адрес и добавлять новые адреса.

С этой целью я собрал простую службу WCF, которая позволяет выполнять простые запросы, и в настоящее время я подключаю ее к текстовому полю, комбинации списков (вскоре он будет заменен на AutoCompleteBox из Silverlight Toolkit).

Моя проблема связана с пониманием, тип возвращаемого значения из моей службы имеет тип IList ‹Address›, а Address не реализует INotifyPropertyChanged и не кажется подходящим для объектов, возвращаемых из службы (которые также могут быть вызваны другими клиентами) чтобы иметь встроенную функциональность SL2. Каков наилучший подход для облегчения двусторонней привязки для редактирования существующих адресов.

Основная идея заключается в следующем:

  1. Пользователь вводит информацию в текстовое поле
  2. Служба вызывается для получения совпадающих адресов IList ‹Address›, который возвращается как ObservableCollection ‹Address› в Reference.cs для моей службы
  3. Возвращаемые значения устанавливаются как ItemSource списка.
  4. Пользователь выбирает правильный адрес и указывает, что требуется обновление
  5. Экземпляр адреса привязан к контейнеру управления, содержащему несколько текстовых полей

По сути, я хочу, чтобы любые изменения в связанных текстовых полях автоматически отражались в экземпляре Address, но без INotifyPropertyChanged, как это будет работать? Нужно ли мне создавать другой класс в моем приложении SL2, который эффективно переопределяет реализации свойств для моего объекта данных службы?

Может ли кто-нибудь указать мне в правильном направлении по этому поводу, поскольку для меня это просто не имеет смысла ...

Ваше здоровье,

Стив


person Stephen Newman    schedule 19.01.2009    source источник


Ответы (1)


Как вы генерируете прокси WCF? Я использовал «Добавить ссылку на службу ...» из проекта SL2 в VS2008, и мои сгенерированные прокси реализуют INotifyPropertyChanged (даже если типы на стороне сервера этого не делают).

Для обычного WCF (не SL2) у svcutil есть переключатель /enableDataBinding, который делает все это. Если вы используете IDE, там может быть флажок.

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

person Marc Gravell    schedule 19.01.2009
comment
Я использую диалоговое окно «Добавить ссылку на службу» в VS.NET 2008, при просмотре настроек ссылки на службу после создания ссылки, похоже, не содержится наиболее вероятный вариант. - person Stephen Newman; 19.01.2009
comment
Как и далее, / enableDataBinding, похоже, работает, просто надеюсь, что я смогу найти вариант в IDE ... - person Stephen Newman; 19.01.2009
comment
Помните: позволить среде IDE обрабатывать все генерации прокси-сервера за вас - не всегда лучшая идея, особенно если вы пытаетесь сделать что-то, что не является поведением по умолчанию. - person Tad Donaghe; 19.01.2009
comment
Я думаю, что флажок стоит на странице Advanced ... - person Marc Gravell; 19.01.2009