为什么Loaded事件中DataContext为空?

问题描述 投票:0回答:1

我正在使用 Activator.Createinstance 来创建一个对象。我创建对象有两种情况。一种是在默认状态下创建对象而不关心功能的情况。其次,当它有一些要加载的属性/数据时,我从 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 }
c# wpf silverlight datacontext activator
1个回答
0
投票

对于遇到此问题的其他人,您可以通过处理 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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.