wpf 为什么DataContext在Loaded Event中为null?

yyyllmsg  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(139)

我正在使用Activator.exe示例创建一个对象。有两种情况下我创建一个对象。一种是在默认状态下创建对象而不考虑功能。第二,当它有一些属性/数据要加载时,我从XML文件中读取。我读取一个xml文件,并根据该文件中的内容创建一个特定的对象,然后调用该对象的方法来加载属性。当用户控件加载时出现问题:在大多数情况下,上下文为空,但并不总是如此。当我创建的对象没有要加载的数据时,不会发生这种情况。
下面的代码将调用该对象:

Type gadgetType = Type.GetType(ObName);
IControl ctrl = (IControl)Activator.CreateInstance(gadgetType);

这段代码在两种情况下都执行。在第二种情况下执行的唯一附加代码如下。

ctrl.CreateFromXml(item);//item is xelement

在Control中,加载的事件是这样的。

void Control_Loaded(object sender, RoutedEventArgs e)
    { ControlViewModel cvm = (ControlViewModel)this.DataContext; //DataContext is null }
5n0oy7gb

5n0oy7gb1#

对于有此问题的其他任何人,可以通过处理DataContextChanged事件而不是Loaded事件,在初始化时访问代码隐藏中的DataContext。根据我的经验,DataContext在Loaded事件中通常为null。
在构造函数中:

DataContextChanged += new DependencyPropertyChangedEventHandler(OnDataContextChanged);

事件处理程序:

private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    // your data context won't be null here.  At least it 
    // wasn't for me.
    if (DataContext is not null)
    {
        // your stuff here
    }
}

相关问题