1

我们正在使用实体框架来检索我们的数据。我们正在尝试将集合视图源绑定到组合框以显示数据。下面是 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 应该能够按该字段对数据进行排序。

但这失败的地方在于尝试检索数据并将其分配给用户控件的加载事件中的集合视图源的源:

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

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

4

1 回答 1

2

我认为你应该声明SortDescriptionsinCollectionViewSource定义

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

CollectionViewSourceComboBox. 这将被解释为ComboBox.Items和稍后在ComboBox.ItemsSource绑定时抛出异常。

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

</ComboBox>
于 2013-05-17T17:11:20.643 回答