/ / TemplateBinding DataContext у Silverlight CustomControl - Silverlight, користувацькі елементи керування, datacontext, прив'язка шаблонів

TemplateBinding DataContext у silverlight CustomControl - silverlight, користувацькі елементи керування, datacontext, templatebinding

У мене досить цікавий випадок з контролем ComboBox - CustomComboBox;

У стилі цього ComboBox, спливаюче вікно містить одне користувацьке управління, яке вимагає DataContext;

<ctrl:CustomGrid DataContext="{TemplateBinding DataContext}" GridName="{Binding Preferences.CurrentGridName}"/>

Ідея:

  • використовувати цей елемент керування кілька разів на одній сторінці
  • щоб використовувати його в контейнері майстер-сторінки
  • елемент керування головною сторінкою повинен мати різні DataContexts щодо сторінки, на якій він знаходиться

Логіка:

  • У заміненому OnApplyTemplate я отримую сітку та підключаю декілька обробників подій

Проблема:

  • Елемент керування головною сторінкою запускає OnApplyTemplate лише один раз
  • Перша поява CustomComboBox - це якочікуваний. Однак кожна наступна поява відбувається з однаковим DataContext, навіть при зміні контексту даних CustomComboBox Ці зміни не стосуються зміни мого CustomGrid DataContext

Я впевнений, що щось у прив'язках або логіці презентації погане ... Будь ласка, надумайте, я був би вдячний за підказку

Дякую

Відповіді:

1 для відповіді № 1

OnApplyTemplate називається, коли a ControlTemplate застосовується до елемента керування, який замінює метод (ні його батьківський, ні дочірній). Якщо OnApplyTemplate вводиться один раз, головний елемент керування також повинен бути створений один раз. Я маю на увазі, що у вас просто є один екземпляр головної сторінки. Це не повинно бути несподіваним.

Говорячи про PopupS і DataContext, часто виникають проблеми із прив'язками з a Popup до поза ним. Отже, я б скоріше написав деякий код, щоб доставити правильний контекст Popups, замість того, щоб покладатися на Bindings. Звичайно, існує проблема відсутності події DataContextChanged до SL5. Щоб вирішити цю проблему, слід визначити свій власний DependencyProperty на тобі CustomComboBox, зв'язати його з CustomComboBox"s контексту і присвоїти його значення Popup в PropertyChangedCallback.