2011-11-29 14 views
6

Estoy creando un control de usuario para el interruptor de luz. Esto es básicamente un control de usuario de Silverlight, que recibe el businessObject en la propiedad "DataContext".Sepa cuándo se ha cambiado el "Contexto de datos" en el código detrás de un UserControl

Puedo enlazar los elementos del lado xaml sin ningún problema, pero en el código subyacente, no sé cómo informarme cuando el dataContext ha cambiado?

Lo necesito para una encuadernación especial.

¡Muchas gracias!

+0

En SL 4 es un poco atascado. Una de las opciones es hacer que su BO sea reposicionable para manejar ese cambio: ¿qué haría dentro de DataContext_changed si estuviera disponible? –

Respuesta

6

Se puede extender la clase de control (UserControl en su caso) y añada un nuevo DependencyProperty envolver DataContext el fin de exponer PropertyChanged. Consulte thesethreeposts y this question. Alternativamente, puede ser que realmente no necesite escuchar DataContextChanged, dependiendo de lo que esté tratando de hacer, ya que podría ser más apropiado manejar los cambios en su modelo.

Finalmente, si tiene la paciencia y la opción, escucho que SL 5 expone DataContextChanged.

+0

Desafortunadamente, no puedo esperar para SL5 :(. He revisado tu enlace y el primero parece ser el más interesante. Pero en el interruptor de luz, no tengo la opción, el artículo está vinculado a "DataContext" , no "MyDataContext" o cualquier otra cosa. Entonces, ¿puedo redefinir el elemento DataContext que tiene mi propia propiedad de Dependencia? – J4N

+0

Desafortunadamente, no estoy familiarizado con LightSwitch. Podría intentar extender el control y agregar 'nuevo Object DataContext público 'en orden para ocultar el 'DataContext' original en el control LS. Luego puede crear una propiedad' MyDataContext' y establecerla siempre que 'DataContext' se establezca, para disparar el evento. Sin embargo, esto sería un problema si los controles LS hacer cualquier truco dentro del get o conjunto de 'DataContext', ya que esos se perderían. –

+0

Finalmente utilicé esto: funciona genial: http://www.codeproject.com/Articles/38559/Silverlight-DataContext-Changed-Event .aspx – J4N

2

Me temo que no puede configurar el campo estático de solo lectura a menos que lo haga con un "nuevo".

Es posible que pueda detectar el DataContext modificado a través de un enlace de datos a DataContext dependencyproperty. p. Registre un nuevo dp llamado "MyDataContext" y cree un enlace.
DataContext es la fuente de enlace y MyDataContext es el destino de enlace, que es DataContext ---> MyDataContext. Así que cada vez que el DataContext va a obtener su MyDataContext dp cambio de devolución de llamada. Creo que esto va a funcionar, pero no probado.

el código es como:

// dp declaration.. 
public static readonly DependencyProperty MyDataContextProperty = DependencyProperty.Register(null, "MyDataContext", typeof(object), typeof(MyControl), new PropertyMetadata(MyDataContextChangedCallback)); 


// create binding in constructor or initialization. 
Binding binding = new Binding("DataContext"); 
BindingOperations.SetBinding(this, MyDataContextProperty, binding); 

Gracias

Cuestiones relacionadas