如何将通用项添加到绑定到WPF中的集合的ComboBox

时间:2010-01-28 01:35:58

标签: c# wpf mvvm combobox

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

ComboBox

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

2 个答案:

答案 0 :(得分:23)

您可以使用CompositeCollection作为ComboBox的ItemsSource以包含“全部”选项。您需要将CollectionContainer的Collection属性设置为“Department对象的ObservableCollection”。

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

不确定这是否适合您的过滤情况......

答案 1 :(得分:0)

假设您有一个名为MyCombo的ComboBox,一个名为MyEntity的实体与名为MyDomainService的DomaineService关联。

别忘了

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