C# 如何将通用项添加到绑定到WPF中集合的组合框中
我在WPF应用程序中有一个组合框,它绑定到C#ViewModel类中的部门对象的ObservableCollection。我想使用组合框按部门筛选另一个集合(现在确实可以了)。问题是,我想在列表顶部添加一个附加选项“All”。有没有正确的方法可以做到这一点。制作一个假的部门在很多方面都是错误的 组合框C# 如何将通用项添加到绑定到WPF中集合的组合框中,c#,wpf,mvvm,combobox,C#,Wpf,Mvvm,Combobox,我在WPF应用程序中有一个组合框,它绑定到C#ViewModel类中的部门对象的ObservableCollection。我想使用组合框按部门筛选另一个集合(现在确实可以了)。问题是,我想在列表顶部添加一个附加选项“All”。有没有正确的方法可以做到这一点。制作一个假的部门在很多方面都是错误的 组合框 <ComboBox ItemsSource="{Binding Path=Departments}" SelectedValue="{Binding Path=Depa
<ComboBox ItemsSource="{Binding Path=Departments}"
SelectedValue="{Binding Path=DepartmentToShow , Mode=TwoWay}" />
您可以使用a作为组合框的项源,以包含“All”选项。您需要将CollectionContainer的Collection属性设置为“ObservableCollection of Department对象”
全部的
不确定这是否适合您的筛选情况,但是…假设您有一个名为
MyCombo
的组合框,一个名为MyEntity
的实体,与名为MyDomainService
的域服务关联
别忘了
using System.ServiceModel.DomainServices.Client;
当然,使用实体和域服务的网站也能很好地工作
您可以调用名为:
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);
}
+1哇,作为一名经验丰富的WPF程序员,我甚至不知道CompositeCollection!在搜索互联网时,有各种各样的解决方法,但没有一个提到这一点!难以置信……是的,当我读到这篇文章时,我很惊讶。今天早上我一直在做一些调查,我想这会奏效的。现在过滤是在Linq查询的构建中完成的,所以我想我可以测试'All',如果没有选中,则迭代peopleCollection。在未来,我计划重构并使用CollectionViewSource过滤视图,而无需重新查询;我不确定这将如何工作,但对于这个问题,我有我的答案。谢谢大家!@Aviad是的,这是一个很好的解决方案,但有一点很糟糕,那就是您不能通过DataContext绑定到Collection属性,因为CompositeCollection是不可释放的。这可以通过绑定到静态资源来解决…这个问题的解决方案有一个示例,演示了如何以这种方式绑定,在我看来并不特别好,但确实有技巧…以这种方式添加ComboBoxitem会引发HorizontalContentAlignment和VerticalContentAlignment绑定错误。有人对此有解决方案吗?这是一个使用Linq to SQL的MVVM WPF应用程序。复合收集解决方案已经很好地工作了几年,但感谢您的额外投入。
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);
}
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();
}
}