/ / TemplateBinding DataContext no silverlight CustomControl - silverlight, controles personalizados, datacontext, templatebinding

TemplateBinding DataContext no silverlight CustomControl - silverlight, controles personalizados, datacontext, templatebinding

Eu tenho um caso bastante interessante com o controle ComboBox - CustomComboBox;

No estilo deste ComboBox, Popup contém um controle personalizado que solicita um DataContext;

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

A ideia:

  • usar este controle várias vezes em uma página
  • para usá-lo em um contêiner de página-mestre
  • o controle da página mestre precisa ter diferentes DataContexts em relação à página em que está

A lógica:

  • No OnApplyTemplate substituído, estou obtendo a grade e conectando alguns manipuladores de eventos

O problema:

  • O controle da página mestre está disparando OnApplyTemplate apenas uma vez
  • A primeira aparência do CustomComboBox é comoesperado. No entanto, cada aparecimento seguinte é com o mesmo DataContext, mesmo ao alterar o datacontext do CustomComboBox Essas mudanças não chegam a mudar meu CustomGrid DataContext

Tenho certeza de que algo nas ligações ou na lógica de apresentação está ruim ... Por favor, jogue algumas idéias, gostaria de uma dica aqui

obrigado

Respostas:

1 para resposta № 1

OnApplyTemplate é chamado quando um ControlTemplate é aplicado ao controle que substitui o método (nem seu pai, nem seus filhos). E se OnApplyTemplate for inserido uma vez, o controle de substituição também deve ser criado uma vez. Quero dizer, você simplesmente tem um única instância de página-mestre. Isso não deve ser inesperado.

Falando sobre Popupareia DataContext, muitas vezes há problemas com ligações de um Popup para fora dela. Então, eu preferiria escrever algum code-behind para fornecer o contexto correto para Popups, em vez de confiar em Bindings. Com certeza há um problema de ausência de evento DataContextChanged antes de SL5. Para contornar este, você deve definir seu DependencyProperty Nas suas CustomComboBox, vincule-o ao CustomComboBox"s contexto e atribuir seu valor ao Popup no PropertyChangedCallback.