WPF用户控件的DataContext为空

时间:2008-11-17 19:01:26

标签: wpf wpf-controls

我有一个用户控件,其中控件的XAML可以绑定父类数据上下文中的相应属性,就像正常一样(数据上下文在xaml中传播)。

例如,我有一个窗口,其DataContext我将设置为ObjectA。然后我在窗口中的用户控件尝试访问dataContext中的属性

所以我的窗口的xaml和后面的代码都可以看到非null的DataContext。

我对DataContext传播的控件可以在Xaml中看到非null的DataContext,但在后面的代码中却看不到。

处理此问题的正确方法是什么?

3 个答案:

答案 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"

并检查调试器的“输出”窗口以获取相关的错误消息。

或者,您能告诉我们更多代码吗?