Множество факторов. Один, который вам нужно заполнить в конструкторе, чтобы данные были для заполнения визуальных элементов. Помните, что вкладка не видна, но это не значит, что она не загружается при запуске приложения.
Для статического списка строк
public class Library : INotifyPropertyChanged
{
private List<string> dropDown1;
public List<string> DropDown1 { get { return dropDown1; } }
public Library()
{
// use data reader to populate dropDown1
}
}
Я знаю, что это получит комментарии, которые могут использовать что-то более легкое, чем List, но List имеет много приятных функций, простой синтаксис и простоту заполнения. В качестве следующего шага вы можете структурировать как клиентский сервер и использовать некоторую статичность, чтобы список заполнялся один раз, а затем использовался всеми. Если у вас есть больше свойств, тогда замените строку классом. Для динамического списка, тогда вы получите текущие данные из таблицы по запросу. В вашем распоряжении вы можете удерживать последний список, и если следующий запрос находится в течение X секунд, тогда вернуть устаревшие данные. Это зависит от того, приемлемы ли устаревшие данные.
Есть много других подходов, и я не претендую на то, что это лучший. Просто приведу сравнительно простой пример для начала.
Когда дело доходит до иерархии, все становится немного сложнее. Там вы можете использовать таблицу ADO.NET для хранения статически зависимых данных, а затем применить фильтр к представлению.