Как добавить общий элемент в 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();
    }
}