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