Activator.Createinstance を使用してオブジェクトを作成しています。オブジェクトを作成するシナリオは 2 つあります。機能を気にせずにデフォルトの状態でオブジェクトが作成された場合。2番目に、XMLファイルから読み取った、ロードするプロパティ/データがある場合。xml ファイルを読み取り、そのファイルのコンテンツに基づいて特定のオブジェクトを作成し、そのオブジェクトのメソッドを呼び出してプロパティを読み込みます。問題は、ユーザー コントロールが読み込まれるときに発生します。ほとんどの場合、datacontext は null ですが、常にではありません。ロードするデータがないオブジェクトを作成すると、これは発生しません。
次のコードは、オブジェクトを初期化します。
Type gadgetType = Type.GetType(ObName);
IControl ctrl = (IControl)Activator.CreateInstance(gadgetType);
このコードは両方のシナリオで実行されます。2 番目のケースで実行される唯一の追加コードは次のとおりです。
ctrl.CreateFromXml(item);//item is xelement
コントロールでは、ロードされたイベントは次のようになります。
void Control_Loaded(object sender, RoutedEventArgs e)
{ ControlViewModel cvm = (ControlViewModel)this.DataContext; //DataContext is null }