Как добавить общий элемент в ComboBox, связанный с коллекцией в WPF - PullRequest
16 голосов
/ 28 января 2010

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

ComboBox

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

Ответы [ 2 ]

23 голосов
/ 28 января 2010

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

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

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

0 голосов
/ 12 апреля 2013

Предположим, у вас есть 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...