我有一个用户控件,其中控件的XAML可以绑定到父正常的数据上下文中的相应属性(数据上下文在xaml中传播).
例如,我有一个窗口,其DataContext我将设置为ObjectA.然后我在窗口中的用户控件尝试访问dataContext中的属性
所以我的窗口的xaml和后面的代码都可以看到非null的DataContext.
我对DataContext传播的控件可以在Xaml中看到非null的DataContext,但在后面的代码中却看不到.
处理这个问题的正确方法是什么?
如果您需要检查是否正在设置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.
不确定这是否能回答您的问题,但在调试问题时非常方便.
我想你正在检查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 } }
我会检查你是否在运行时遇到绑定错误.将此命名空间添加到XAML:
xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"
并检查调试器的"输出"窗口以获取相关的错误消息.
或者,您能告诉我们更多代码吗?