我有一个用户控件,其中控件的XAML可以绑定父类数据上下文中的相应属性,就像正常一样(数据上下文在xaml中传播)。
例如,我有一个窗口,其DataContext我将设置为ObjectA。然后我在窗口中的用户控件尝试访问dataContext中的属性
所以我的窗口的xaml和后面的代码都可以看到非null的DataContext。
我对DataContext传播的控件可以在Xaml中看到非null的DataContext,但在后面的代码中却看不到。
处理此问题的正确方法是什么?
答案 0 :(得分:23)
如果您需要检查是否正在设置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。
不确定这是否能解决您的问题,但在调试问题时非常方便。
答案 1 :(得分:12)
我认为你正在检查UserControl的构造函数中的'DataContext'。它在构造函数中为null,因为执行在构造函数代码中时尚未创建用户控件。但是在Loaded事件中检查属性,您将正确看到该对象。
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
}
}
答案 2 :(得分:10)
我会检查你是否在运行时遇到绑定错误。将此命名空间添加到XAML:
xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"
并检查调试器的“输出”窗口以获取相关的错误消息。
或者,您能告诉我们更多代码吗?