Tengo una pregunta de varias partes:Detectando DataContext cambiado en Silverlight
(1) ¿Hay una buena razón por la que Silverlight no expone un evento DataContextChanged? Parece que se podrían evitar muchos problemas si alguien en Microsoft simplemente cambiara internal
a public
en la clase FrameworkElement (como lo hace WPF).
(2) He encontrado one o two diferentes métodos para hackear su camino en un evento DataContextChanged usando DependencyProperties en una configuración u otra. Pero no puedo hacer que funcionen de manera confiable. Mi prueba hasta ahora parece mostrar que disparan el evento DataContextChanged pirateado muy bien para la primera clase a la que los conecto, pero no disparan para ninguna otra clase. ¿Alguien más se ha encontrado con ese problema? O mejor aún, ¿se han abierto camino a su alrededor?
(3) La razón por la que me he dado a querer saber cuándo ha cambiado mi DataContext es que hay algunas operaciones de IU que son complicadas de hacer en XAML, pero son triviales en el código subyacente; y para muchas de esas cosas, necesito manejar eventos planteados por mi ViewModel; y por lo tanto, necesito saber cuándo mi ViewModel ha cambiado, así que puedo conectar los manejadores de eventos. ¿Es esta una vista precisa del mundo? ¿O es el hecho de que estoy tratando con este tipo de cosas en código subyacente, una indicación bastante buena de que mi pensamiento se ha descarrilado hace algunos años? No soy un purista de MVVM: solo quiero llegar rápidamente a un buen código y no me importa cómo llegue allí. Code-behind me ha servido razonablemente bien durante más de una década, y estoy dispuesto a abandonarlo por completo. ¿Pero es mi pragmatismo lo que me hace más difícil en este punto?
Te escucho codificar por detrás que te ha servido bien durante más de una década. –
Por lo que vale, se supone que este evento estará expuesto en Silverlight 5 (http://www.dotblogs.com.tw/kan/archive/2011/01/28/21097.aspx), aunque estoy seguro de que esto es una pequeña comodidad ahora. – RobSiklos
Bueno saber. Me había perdido eso. –