WPF用户控制';的DataContext为空
我有一个用户控件,控件的XAML可以像普通控件一样绑定到父级数据上下文中的相应属性(数据上下文在XAML中传播) 例如,我有一个窗口,我将其DataContext设置为ObjectA。然后,我的窗口中的用户控件将尝试访问dataContext中的属性 因此,我的窗口的xaml和代码隐藏都可以看到非空的DataContext DataContext传播到的控件可以在Xaml中看到非null DataContext,但在代码隐藏中看不到WPF用户控制';的DataContext为空,wpf,wpf-controls,Wpf,Wpf Controls,我有一个用户控件,控件的XAML可以像普通控件一样绑定到父级数据上下文中的相应属性(数据上下文在XAML中传播) 例如,我有一个窗口,我将其DataContext设置为ObjectA。然后,我的窗口中的用户控件将尝试访问dataContext中的属性 因此,我的窗口的xaml和代码隐藏都可以看到非空的DataContext DataContext传播到的控件可以在Xaml中看到非null DataContext,但在代码隐藏中看不到 处理此问题的正确方法是什么?我认为您正在检查UserContr
处理此问题的正确方法是什么?我认为您正在检查UserControl构造函数中的“DataContext”。由于在构造函数代码中执行时尚未创建用户控件,因此在构造函数处它将为null。但是在加载事件时检查属性,您将正确地看到对象
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
}
}
否则,如果需要检查是否正在设置DataContext,则可以使用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
}
}
注意,在DataContext从null更改为其他值之前,它不会输入UserControl1_DataContextChanged
不确定这是否回答了您的问题,但在调试问题中使用起来非常方便。我会检查您在运行时是否有绑定错误。将此命名空间添加到XAML:
xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"
并检查调试器的输出窗口中的相关错误消息
或者,您可以向我们展示更多代码吗?谢谢您。。。这是甜蜜的。。。我希望我能在几周前找到这个。。。哈哈,好吧。也解决了我完全无关的问题:)谢谢。教一个人钓鱼。。。我也不知道你能做到这一点。谢谢。我必须在初始化组件之前订阅DataContextChanged事件,这样我才能在第一次设置DataContext时处理该事件。也可以这样做:DataContextChanged+=UserControl1_DataContextChanged;不确定此回答之后是否有任何更改-但加载的事件的上下文为NULL。在我的程序(.NET Framework 4.6.2)中,DataContext实际上是在InitializeComponent执行后初始化的。