Связывание WPF с прокси - PullRequest
3 голосов
/ 30 июня 2011

У меня есть несколько классов коллекций, которые реализуют свои собственные уведомления об обновлении.Должно быть довольно легко перевести эти уведомления в INotifyCollectionChanged реализацию в прокси-классе.

INotifyPropertyChanged уже позаботился;этот вопрос касается только прокси коллекций.

Итак, я ищу способ создания прокси, который относительно прост в использовании из XAML.Это особенно верно для вложенных коллекций.Пользовательские классы коллекции являются частью библиотеки, которая не может быть изменена (и не получена из).Также невозможно заменить типы коллекций на INotifyCollectionChanged -совместимые эквиваленты, потому что код обновления данных находится вне моего контроля.

Я бы предпочел решение, которое также работает с SL, но это не так.строгое требование.

До сих пор я считаю, что следующие подходы жизнеспособны:

  • Определите TypeDescriptionProvider, зарегистрированный для классов коллекции, который добавляет свойство Proxy.Это позволяет связывать пути в прокси.Кажется, что это решение является самым простым с точки зрения XAML, но не совместимо с SL.
  • Определите преобразователь значений, который создает прокси.Это будет работать немного больше со стороны XAML.Это должно работать для SL.Однако может потребоваться, чтобы «промежуточные» визуальные элементы содержали результат преобразователя значений, если в пути требуется более одного преобразования значений.

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

Любые рекомендации, какой из этих двух подходов лучше, или любые другие подходы?

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Я решил пойти дальше с конвертером типов, который также является MarkupExtension, как описано в этой записи блога .

MarkupExtension в настоящее время не поддерживаетсяSilverlight, но это будет в v5.

1 голос
/ 01 июля 2011

Пол Стовелл создал редактируемый адаптер коллекции, который сам по себе, вероятно, не удовлетворит ваши потребности, но должен дать вам хорошую отправную точку для создания соответствующего адаптера / прокси.1004 *

...