Как добавить общий элемент в ComboBox, связанный с коллекцией в WPF

У меня есть ComboBox в приложении WPF, которое связано с ObservableCollection объектов Department в классе C# ViewModel. Я хочу использовать поле со списком, чтобы отфильтровать другую коллекцию по отделам (и сейчас это действительно работает). Проблема в том, что я хочу добавить дополнительную опцию "Все" в начало списка. Есть ли правильный способ сделать это. Создание поддельного отдела кажется неправильным во многих отношениях.

ComboBox

<ComboBox ItemsSource="{Binding Path=Departments}" 
          SelectedValue="{Binding Path=DepartmentToShow , Mode=TwoWay}" />

2 ответа

Решение

Вы можете использовать CompositeCollection в качестве ItemsSource для ComboBox, чтобы включить опцию "Все". Вам необходимо установить для свойства Collection объекта CollectionContainer значение "ObservableCollection of Department objects".

<ComboBox >
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ComboBoxItem>All</ComboBoxItem>
            <CollectionContainer x:Name="departmentCollection"/>
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

Не уверен, что это подойдет для вашей ситуации фильтрации...

Предположим, у вас есть ComboBox с именем MyComboсущность с именем MyEntity связанный с DomaineService с именем MyDomainService,

Не забудь

using System.ServiceModel.DomainServices.Client;

и, конечно, использование хорошо работает с вашим веб-сайтом вашей сущности и DomainService

Вы называете Proc по имени:

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();
    }
}
Другие вопросы по тегам