2013-05-17 33 views
1

我们使用实体框架来检索我们的数据。我们试图将集合视图源绑定到组合框以显示数据。下面是该CollectionViewSource定义:使用EF Items获取“使用ItemsSource之前项目集合必须为空”使用EF

<CollectionViewSource x:Key="aSICodesControlledEnvironmentViewSource" d:DesignSource="{d:DesignInstance {x:Type AsiEF:ASICodesControlledEnvironment}, CreateList=True}"> 

AsiEF是实体框架组件。下面是该组合框的XAML:

<ComboBox x:Name="cmbControlledEnvLast30" Margin="480,20,0,0" DisplayMemberPath="ContEnvDesc" SelectedValue="ContEnvDesc" Width="150" FontSize="14" 
     ItemsSource="{Binding Source={StaticResource aSICodesControlledEnvironmentViewSource}}"> 
<CollectionViewSource> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="DisplayOrder" /> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 
</ComboBox> 

正如你所看到的,我们试图通过现场DisplayOrder对数据进行排序,即使该字段不是在组合框中可见,我仍然认为CollectionViewSource应该能够按照该字段对数据进行排序。

但是,在这倒下是在试图检索数据,并将其分配到集合查看源代码在用户控件的加载事件来源:

ComboBoxSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("aSICodesControlledEnvironmentViewSource"))); 
ComboBoxSource.Source = asiContext.ASICodesControlledEnvironments; 

尝试当它挂在第二行,分配CollectionViewSource对象ComboBoxSource的Source属性。 asiContext是我们的AsiEF的ObjectContext。被抛出的错误是,“在使用ItemsSource之前Items收集必须是空的”。对不起,我不明白我们做错了什么。我尝试从XAML中删除ItemsSource组合框中的赋值,但这不起作用。那么,我们在哪里出错?

回答

2

我想你应该在CollectionViewSource定义

<CollectionViewSource x:Key="aSICodesControlledEnvironmentViewSource" 
         d:DesignSource="{d:DesignInstance {x:Type AsiEF:ASICodesControlledEnvironment}, CreateList=True}"> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="DisplayOrder" /> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

声明SortDescriptionsComboBox删除其他CollectionViewSource。这将被解释为ComboBox.Items,然后当ComboBox.ItemsSource被绑定时会抛出异常。

<ComboBox x:Name="cmbControlledEnvLast30" 
      ItemsSource="{Binding Source={StaticResource aSICodesControlledEnvironmentViewSource}}"> 

</ComboBox> 
+0

我刚刚按照你的建议做了,但得到了错误信息,“'System.Windows.Data.BindingListCollectionView'视图不支持排序。”在Loaded事件中分配ComboBoxSource的Source属性时出现此错误。 – Rod

+0

对不起。我不知道这个,因为BindingListCollectionView确实支持排序。请参阅[这里](http://msdn.microsoft.com/en-us/library/system.windows.data.bindinglistcollectionview.sortdescriptions.aspx)。 – LPL

+0

谢谢你的链接,LPL。我明白你的意思,BindingListCollectionView确实支持排序。我到达这里,但可能是因为数据源来自EF吗?排序来自EF的集合的唯一方法是使用LINQ表达式?我们宁愿使用XAML。 – Rod

相关问题