Хорошо, поэтому очевидный ответ таков: поток составного элемента управления требует, чтобы мои дочерние элементы управления были созданы в определенный момент времени. У меня проблема, я думаю, что другие люди тоже должны были.
Мой элемент управления - это составной элемент управления "контейнер / сбор". Он будет снабжен объектом и на основе данных этих объектов создаст несколько дочерних элементов управления. Таким образом, мой элемент управления будет отображать заголовок (всегда) и x-число, скажем, элементов управления TextBox (в зависимости от объекта, которым он был передан).
Я, очевидно, создаю свой заголовок в CreateChildControls (), но я не могу также создать там свои TextBoxes, потому что я не знаю, был ли еще подан объект (на котором основаны TextBoxes)? Я думал об открытии свойства / метода для установки / подачи объекта, но я не уверен, когда он будет вызван.
Так что мне делать? Я имею в виду, я не могу создать TextBoxes в CreateChildControls () или я могу? Я имею в виду - когда вызывается CreateChildControls () - я знаю, что могу вызвать EnsureChildControls () (что я уже делаю в свойстве, чтобы установить innerText заголовка - так как мне нужно создать заголовок перед установкой его innerText, очевидно).
Как насчет этого
var c = new MyContainerControl();
c.Header = "fun";
c.TextBoxObject = myTextBoxes;
Это вызвало бы ошибку (или, в лучшем случае, не создавало бы TextBox'ов), если бы я поместил создание TextBoxes в CreateChildControls ().
Было бы более разумно вместо этого просто сохранять заголовок в переменной-члене и, следовательно, не вызывать EnsureChildControls () в предоставляемом методе / свойстве, устанавливающем Header innerText. Мне просто не очень нравится этот подход, так как он усложнит ситуацию, добавив дополнительную логику для временного хранения, а затем придется выяснять, когда его устанавливать (возможно, в PreRender).
Также, я думаю, я мог бы создать какой-то элемент управления с привязкой к данным, обеспечивающий присутствие данных во время вызова .DataBind (). Мне это тоже не нравится, так как в прошлый раз, когда я смотрел на создание элементов управления с привязкой к данным, это было очень сложно.
Это действительно должно быть легко решаемой задачей - я знаю, что что-то упустил где-то ...