WPF用户控件的DataContext为空

Jus*_*ier 18 wpf wpf-controls

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

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

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

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

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

Bij*_*ton 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
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在DataContext从null更改为其他值之前,它不会输入UserControl1_DataContextChanged.

不确定这是否能回答您的问题,但在调试问题时非常方便.


Job*_*Joy 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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不确定自此答案以来是否有任何更改 - 但 Loaded 事件的上下文为 NULL。 (3认同)

hug*_*own 10

我会检查你是否在运行时遇到绑定错误.将此命名空间添加到XAML:

xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"
Run Code Online (Sandbox Code Playgroud)

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

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