Почему DataContext в загруженном событии имеет значение null? ⇐ C#
-
Гость
Почему DataContext в загруженном событии имеет значение null?
Я использую Activator.Createinstance для создания объекта. Есть два сценария, в которых я создаю объект. Один, когда объект создается в состоянии по умолчанию, не заботясь о функциональности. Во-вторых, когда у него есть некоторые свойства/данные для загрузки, которые я читаю из XML-файла. Я читаю XML-файл и создаю определенный объект на основе содержимого этого файла, а затем вызываю метод этого объекта для загрузки свойств. Проблема возникает при загрузке пользовательского элемента управления: в большинстве случаев контекст данных имеет значение null, но не всегда. Этого не происходит, когда я создаю объект без данных для загрузки.
Следующий код инициализирует объект:
Тип гаджета = Type.GetType(ObName); IControl ctrl = (IControl)Activator.CreateInstance(gadgetType); Этот код выполняется в обоих сценариях. Единственный дополнительный код, который выполняется во втором случае, следующий.
ctrl.CreateFromXml(item);//item — это xelement а в Control загруженное событие выглядит следующим образом.
void Control_Loaded(отправитель объекта, RoutedEventArgs e) { ControlViewModel cvm = (ControlViewModel)this.DataContext; //Контекст данных имеет значение null }
Я использую Activator.Createinstance для создания объекта. Есть два сценария, в которых я создаю объект. Один, когда объект создается в состоянии по умолчанию, не заботясь о функциональности. Во-вторых, когда у него есть некоторые свойства/данные для загрузки, которые я читаю из XML-файла. Я читаю XML-файл и создаю определенный объект на основе содержимого этого файла, а затем вызываю метод этого объекта для загрузки свойств. Проблема возникает при загрузке пользовательского элемента управления: в большинстве случаев контекст данных имеет значение null, но не всегда. Этого не происходит, когда я создаю объект без данных для загрузки.
Следующий код инициализирует объект:
Тип гаджета = Type.GetType(ObName); IControl ctrl = (IControl)Activator.CreateInstance(gadgetType); Этот код выполняется в обоих сценариях. Единственный дополнительный код, который выполняется во втором случае, следующий.
ctrl.CreateFromXml(item);//item — это xelement а в Control загруженное событие выглядит следующим образом.
void Control_Loaded(отправитель объекта, RoutedEventArgs e) { ControlViewModel cvm = (ControlViewModel)this.DataContext; //Контекст данных имеет значение null }
Мобильная версия