Задать вопрос

Событие ComboBox_SelectionChanged, установленное в XAML, отрабатывает до отрисовки всей формы

Форма описывается в XAML:

<ComboBox Name="comboPartitionTypes" SelectedIndex="0" SelectionChanged="comboPartitionTypes_SelectionChanged">
    <ComboBoxItem Content="partition1" />
    <ComboBoxItem Content="partition2" />
</ComboBox>
<StackPanel Name="panel1"></StackPanel>
<StackPanel Name="panel2"></StackPanel>


При изменении выбранного элемента списка должен отобразится соответствующий StackPanel:

private void comboPartitionTypes_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
            switch (comboPartitionTypes.SelectedIndex)
            {
                case 0:
                    panel1.Visibility = System.Windows.Visibility.Visible;
                    panel2.Visibility = System.Windows.Visibility.Hidden;
                    break;

                case 1:
                    panel1.Visibility = System.Windows.Visibility.Hidden;
                    panel2.Visibility = System.Windows.Visibility.Visible;
                    break;
            }
        }


Событие comboPartitionTypes_SelectionChanged при указанном в XAML comboPartitionTypes.SelectedIndex отрабатывает еще до инициализации StackPanel, в результате panel1 и panel2 равны null. Если убрать comboPartitionTypes.SelectedIndex, то все отлично, но форма не красивая без выбранного элемента. Приходится в начале обработчика события писать

private void comboPartitionTypes_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (!IsLoaded) return;


Где логика такого поведения? Почему сначала не нарисовать все элементы на форму, а потом уже запускать обработку событий?
  • Вопрос задан
  • 3504 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
gouranga
@gouranga
У Джоша Смита есть статья про это поведение XAML.
Ответ написан
ZloyRabadaber
@ZloyRabadaber
Частенько ловлю себя на мысли, что если упираешься в необходимость жесткого порядка инициализации чего-либо, отрисовки, несвязных вызовов и т.д. и т.п. — это признак неправильной архитектуры приложения. Стоит посидеть подумать и попить чай с печеньками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы