Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将通用项添加到绑定到WPF中集合的组合框中_C#_Wpf_Mvvm_Combobox - Fatal编程技术网

C# 如何将通用项添加到绑定到WPF中集合的组合框中

C# 如何将通用项添加到绑定到WPF中集合的组合框中,c#,wpf,mvvm,combobox,C#,Wpf,Mvvm,Combobox,我在WPF应用程序中有一个组合框,它绑定到C#ViewModel类中的部门对象的ObservableCollection。我想使用组合框按部门筛选另一个集合(现在确实可以了)。问题是,我想在列表顶部添加一个附加选项“All”。有没有正确的方法可以做到这一点。制作一个假的部门在很多方面都是错误的 组合框 <ComboBox ItemsSource="{Binding Path=Departments}" SelectedValue="{Binding Path=Depa

我在WPF应用程序中有一个组合框,它绑定到C#ViewModel类中的部门对象的ObservableCollection。我想使用组合框按部门筛选另一个集合(现在确实可以了)。问题是,我想在列表顶部添加一个附加选项“All”。有没有正确的方法可以做到这一点。制作一个假的部门在很多方面都是错误的

组合框

<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();
    }
}