ComboBox ItemsSource изменено => SelectedItem испорчен

Я думаю что, если вложенные классы являются достаточно большими, что Вы чувствуете потребность разделить их на их собственные файлы, они не должны, вероятно, быть вложенными классами. Сделайте их внутренними членами того же пространства имен как MainClass вместо этого.

Частичные классы действительно только существуют для поддержки генераторов кода и использования их для повреждения программиста, записанный код в управляемые блоки является индикатором плохого дизайна.

Видят эта статья для веселого примера того, какой не сделать с частичными классами.

23
задан Jefim 9 March 2011 в 09:22
поделиться

1 ответ

Стандарт ComboBox не имеет такой логики. И, как вы упомянули, SelectedItem становится null уже после того, как вы позвоните Clear, поэтому ComboBox не имеет представления о вашем намерении добавить тот же элемент позже и, следовательно, ничего не делает для его выбора. При этом вам придется запоминать ранее выбранный элемент вручную, а после обновления вашей коллекции восстановить выбор также вручную. Обычно это делается примерно так:

public void RefreshMyItems()
{
    var previouslySelectedItem = SelectedItem;

    MyItems.Clear();
    foreach(var myItem in LoadItems()) MyItems.Add(myItem);

    SelectedItem = MyItems.SingleOrDefault(i => i.Id == previouslySelectedItem.Id);

}

Если вы хотите применить одинаковое поведение ко всем ComboBoxes (или, возможно, ко всем Selector элементам управления), вы можете рассмотреть возможность создания Behavior ( присоединенное свойство или смешанное поведение ). Это поведение будет подписываться на события SelectionChanged и CollectionChanged и будет сохранять / восстанавливать выбранный элемент при необходимости.

10
ответ дан 29 November 2019 в 02:39
поделиться
Другие вопросы по тегам:

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