Я думаю что, если вложенные классы являются достаточно большими, что Вы чувствуете потребность разделить их на их собственные файлы, они не должны, вероятно, быть вложенными классами. Сделайте их внутренними членами того же пространства имен как MainClass вместо этого.
Частичные классы действительно только существуют для поддержки генераторов кода и использования их для повреждения программиста, записанный код в управляемые блоки является индикатором плохого дизайна.
Видят эта статья для веселого примера того, какой не сделать с частичными классами.
Стандарт 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
и будет сохранять / восстанавливать выбранный элемент при необходимости.