PDA

Просмотр полной версии : Присвоение значений компонентам на ранее не открытой вкладке


Freedom77
01.10.2010, 01:29
Как ПРАВИЛЬНО присвоить значения компонентам, которые размещены на ранее не открытой вкладке. При присвоении значения одновременно с командой ...selectedChild= ... выдаёт ошибку о не существовании компоненты. Если значение присвоить в событии creationComplete то всё нормально. Но как быть если таких значений большое количество? Не прописывать же их для каждой компоненты отдельно.

alatar
01.10.2010, 02:29
О каких значениях речь?

Волгоградец
01.10.2010, 11:32
Если вкладок немного, то можно создать их все сразу, а не создавать каждую при открытии.

Freedom77
01.10.2010, 11:55
О каких значениях речь?
Например в Label внести определённое значение.

Добавлено через 2 минуты
Если вкладок немного, то можно создать их все сразу, а не создавать каждую при открытии.
Не совсем верно на мой взгляд. Это займёт дополнительное время при генерации.

alatar
01.10.2010, 16:59
Не прописывать же их для каждой компоненты отдельно.
А как вы себе это представляли?
Объясните поподробнее, чего вы хотите добиться, я вас явно не понимаю.
P.S. На абстрактный вопрос, можно получить только абстрактный ответ.

Freedom77
02.10.2010, 23:03
Объясните поподробнее, чего вы хотите добиться, я вас явно не понимаю.

Есть TabNavigator с несколькими вкладками. Например в одной вкладке ввожу данные в текстовое поле, а в другом нужно отобразить.
Как делаю:
На первой вкладке рядом с текстовым полем кнопка, по нажатию на которую происходит:
1) Присвоение например в label введенного значения
2) Переход на вторую вкладку.

Ошибка на 1 шаге. Так как label не отрисован, соответственно присвоить значение не получается (хотя странно что система не видит какие компоненты у неё расположены).
Смена порядка выполнения 1 и 2 пункта роль не играет.

Можно прилепить присвоение значения в CreateComplete 2 вкладки. Но это разово, и при повторном переходе уже не работает. Пока не могу найти событие, которое выполняется при каждом переходе на определённый NavigatorContent.

alatar
03.10.2010, 01:55
1. Проверить создан ли компонент (после первого перехода он уже будет создан). Можно просто обернуть в try catch.
2. Если создан, то присваиваем значения, если не создан, то присваиваем по creationComplete
Ну и переход в любом месте по-вкусу.

Freedom77
03.10.2010, 05:55
Идея как раз такая была. Не подскажите как провести проверку на существование компоненты?

alatar
03.10.2010, 14:13
Можно просто обернуть в try catch присвоение значений.

Freedom77
04.10.2010, 01:25
Неужели разработчики не учитывали такой случай, быть не может. Облазил все сайты, путного ответа как решить стандартным путём не нашёл.
Должен же быть стандартный путь присвоения значения компонентам расположенным в приложении, несмотря на то что та или иная вкладка или ещё что-то не открывалось.

Deidara
04.10.2010, 06:37
1. Создаем [Bindable] переменные с гет/сет методами для необходимых параметров.
2. Привязывает параметры объектов к переменным
3. При переходе на вкладку меняем значения переменных

Freedom77
04.10.2010, 11:35
уже лучше, спасибо!
Но вопрос присвоения компонентам уже существующих прямым указанием id и свойства меня не оставляет в покое. Я понимаю присвоить значение новой компоненте, которая создаётся динамически. Но тут ведь всё расписано.
Может в настройках проекта есть пункт определить все компоненты при запуске (не прорисовывая их)?

alatar
04.10.2010, 12:00
Подобные задачи решаются с помощью модели. Компоненты следят за изменениями модели и меняют свое состояние (немного похоже на биндинг).

GemiBillyBob
13.10.2010, 20:01
Ставим creationPolicy="all", и все вкладки и их внутренности создаются при создании компонента, в котором они находятся.

Перечитал заново, это не удовлетворяет требованиям(