visual tutorial studio que espaƱol ejemplos desde cero aprender wpf wpf-controls

tutorial - El DataContext del Control de Usuario de WPF es nulo



wpf vs windows forms (3)

Creo que está comprobando el ''DataContext'' en el constructor del UserControl. Será nulo en el Constructor ya que el control del usuario aún no se ha creado mientras la ejecución está en el código del constructor. Pero revise la propiedad en el evento Loaded para ver el objeto correctamente.

public partial class UserControl1 { public UserControl1() { this.InitializeComponent(); //DataContext will be null here this.Loaded += new RoutedEventHandler(UserControl1_Loaded); } void UserControl1_Loaded(object sender, RoutedEventArgs e) { //Check DataContext Property here - Value is not null } }

Tengo un control de usuario donde el XAML del control se puede unir a las propiedades apropiadas del contexto de datos del padre como normal (el contexto de datos se propaga en xaml).

Por ejemplo, tengo una ventana cuyo DataContext estoy configurando a ObjectA, por ejemplo. Mi control de usuario dentro de la ventana es entonces intentar acceder a las propiedades dentro del dataContext

Así que el xaml y el código de mi ventana pueden ver un DataContext no nulo.

Mi control al que se propaga DataContext puede ver un DataContext no nulo en el Xaml pero no en el código subyacente.

¿Cuál es la forma correcta de manejar esto?


En su defecto, si necesita comprobar si se está configurando DataContext, puede usar DataContextChanged

public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); DataContextChanged += new DependencyPropertyChangedEventHandler(UserControl1_DataContextChanged); } void UserControl1_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { // You can also validate the data going into the DataContext using the event args } }

Tenga en cuenta que no ingresará UserControl1_DataContextChanged hasta que DataContext cambie de nulo a un valor diferente.

No estoy seguro de si esto responde a su pregunta, pero puede ser bastante útil para usar en problemas de depuración.


Verificaría si tienes un error vinculante en el tiempo de ejecución. Agregue este espacio de nombres a su XAML:

xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"

y verifique en la ventana de Salida del depurador los mensajes de error relevantes.

Alternativamente, ¿puedes mostrarnos más código?