当前位置:  开发笔记 > 编程语言 > 正文

WPF用户控件的DataContext为空

如何解决《WPF用户控件的DataContext为空》经验,为你挑选了3个好方法。

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

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

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

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

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



1> Bijington..:

如果您需要检查是否正在设置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.

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



2> Jobi Joy..:

我想你正在检查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
    }
}



3> hughdbrown..:

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

xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"

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

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

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有