Как установить (несвязанный) SelectedIndex для WPF Windows.Controls.ComboBox?

Это должно быть легко, но это не работает. У меня есть поле со списком WPF, привязанное к списку.

  • Элементы заполняются просто отлично
  • Я хочу, чтобы первый элемент отображался при запуске.
  • Однако! Если для SelectedIndex установлено значение 0 или что-то еще, оно остается пустым.

Воззуп?

Код Результат: При загрузке формы элемент не выбран. :-(


person MrGreggles    schedule 02.10.2009    source источник


Ответы (2)


Я думаю, проблема будет заключаться в том, что элементы ComboBox заполняются в фоновом потоке (с помощью привязки), и поэтому в то время, когда вы устанавливаете SelectedIndex на 0, в списке нет никаких элементов.

Если это так, трюк состоит в том, чтобы обработать событие StatusChanged в ItemContainerGenerator ComboBox и установить там выбранный вами индекс:

comboBox1.ItemContainerGenerator.StatusChanged += ItemContainerGenerator_StatusChanged;

void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
    if (comboBox1.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
    {
        return;
    }

    // unhook the event - we don't need it now
    comboBox1.ItemContainerGenerator.StatusChanged -=
        ItemContainerGenerator_StatusChanged;

    comboBox1.SelectedIndex = 0;
}
person Matt Hamilton    schedule 02.10.2009
comment
О, Боже. Сила превосходит простоту, лол. Спасибо за вашу помощь. Что должно быть, то должно быть. - person MrGreggles; 02.10.2009
comment
Причина теперь очевидна: я создавал объект в XAML List‹String›, и, поскольку я не знал, как заполнить такой объект в XAML, я делал это на C#, поэтому я думаю, что все было не синхронизировано. Теперь, когда создание и заполнение выполняются в XAML, настройка SelectedIndex в XAML работает нормально. Спасибо, Мэтт, за код. Может пригодится в будущем. - person MrGreggles; 02.10.2009
comment
(Извините за грамматические ошибки выше - результат изменения, а не проверки. Дох.) - person MrGreggles; 02.10.2009

Я склонен использовать типы данных на основе ObservableCollection для DataContext.

person ChrisBD    schedule 02.10.2009