在EF中使用ItemsSource之前获取“Items集合必须为空”

时间:2013-05-17 16:56:04

标签: wpf entity-framework collectionviewsource

我们正在使用实体框架来检索我们的数据。我们正在尝试将集合视图源绑定到组合框以显示数据。这是CollectionViewSource的定义:

<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应该能够按数据排序数据字段。

但是这个问题在于尝试检索数据并将其分配给用户控件加载事件中集合视图源的Source:

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

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

1 个答案:

答案 0 :(得分:2)

我认为您应该在SortDescriptions定义

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

并从CollectionViewSource中删除其他ComboBox。这将被解释为ComboBox.Items,稍后当ComboBox.ItemsSource绑定时,它会抛出异常。

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

</ComboBox>