2013-05-17 36 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

相關問題