Как добавить общий элемент в ComboBox, связанный с коллекцией в WPF
У меня есть ComboBox в приложении WPF, связанный с объектом ObservableCollection объектов отдела в классе С# ViewModel. Я хочу использовать поле со списком, чтобы отфильтровать еще одну коллекцию по отделам (И действительно, это работает для этого сейчас). Проблема в том, что я хочу добавить дополнительную опцию "Все" в начало списка. Есть ли правильный способ сделать это. Создание поддельного отдела кажется неправильным во многих отношениях.
ComboBox
<ComboBox ItemsSource="{Binding Path=Departments}"
SelectedValue="{Binding Path=DepartmentToShow , Mode=TwoWay}" />
Ответы
Ответ 1
Вы можете использовать CompositeCollection в качестве ItemsSource для ComboBox, чтобы включить опцию "Все". Вам необходимо установить свойство Collection CollectionContainer в свой объект ObservableCollection of Department.
<ComboBox >
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem>All</ComboBoxItem>
<CollectionContainer x:Name="departmentCollection"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
Не уверен, что это будет подходящим для вашей ситуации фильтрации...
Ответ 2
Предположим, что у вас есть ComboBox с именем MyCombo
, объект с именем MyEntity
, связанный с DomaineService с именем MyDomainService
.
Не забывайте
using System.ServiceModel.DomainServices.Client;
и, конечно, использование хорошо работающего сайта с вашим веб-сайтом вашей организации и DomainService
Вы вызываете Proc named:
void LoadEntities()
{
MyDomainService_Context = new MyDomainService();
EntityQuery<MyEntity > mQuery = null;
mQuery = from q in _Context.GetMyDomainServiceQuery()
select q;
LoadOperation<MyEntity > loadOpLoadEntities = _Context.Load(mQuery, LoadOpLoadEntitiesCallBack, null);
}
Затем в функции CallBack
:
void LoadOpLoadEntitiesCallBack(LoadOperation<MyEntity> loadOperation)
{
if (loadOperation.Entities.Count() > 0)
{
List<MyEntity> mList = new List<MyEntity>();
MyEntity mE = new MyEntity();
mE.Column1 = -1;
mE.Column2 = "Default value";
mList.Add(mE);
for (int i = 0; i < loadOperation.Entities.Count(); i++)
{
mList.Add(loadOperation.Entities.ToList()[i]);
}
this.MyCombo.ItemsSource = mList.ToList();
}
}