Во время создания пользовательского контроля я заполняю комбинированный список некоторыми данными. Работает отлично. У меня Status.ID в качестве valuePath и Status.Name в качестве displayPath.
cmb.ItemsSource = dbEntities.Status
Comobox будет использоваться в качестве элемента управления фильтра, и мне нужно вставить некоторое значение для «All», которое будет использоваться в качестве пустого фильтра.
Сначала я попробовал забавное решение:
ObjectSet objectSet= dbEntities.Status;
Status stAll = new Status();
stAll.ID = -1;
stAll.Name = "All";
objectSet.AddObject(stAll);
cmb.ItemsSource = objectSet;
По какой-то причине объект не добавляется в набор объектов. Это не бросило никакого исключения либо.
Затем я попытался вставить его вручную в первый индекс, но получил ошибку:
«Операция недопустима, когда ItemsSource используется. Получите доступ к элементам и измените их с помощью ItemsControl.ItemsSource».
Мой код выглядел так:
cmb.ItemsSource = entities.Status;
cmb.Items.Insert(0,"All");
Оба не работали. Какой самый простой способ добавить эту строку в комбинированный список? Сообщение об ошибке запутало меня. Я не уверен, как использовать ItemsSource для таких целей.
edit: у меня не было достаточно представителей, чтобы ответить на мой собственный вопрос, так что вот рабочий код. Еще раз спасибо Крейгу.
CompositeCollection comp = new CompositeCollection();
comp.Add(new CollectionContainer {Collection = dbEntities.Status});
Status stAll = new Status();
stAll.ID = -1;
stAll.Name = "All";
comp.add(stAll);
cmb.ItemsSource = comp;
//do whatever filter you want when the selected value is -1