我們使用實體框架來檢索我們的數據。我們試圖將集合視圖源綁定到組合框以顯示數據。下面是該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組合框中的賦值,但這不起作用。那麼,我們在哪裏出錯?
我剛剛按照你的建議做了,但得到了錯誤信息,「'System.Windows.Data.BindingListCollectionView'視圖不支持排序。」在Loaded事件中分配ComboBoxSource的Source屬性時出現此錯誤。 – Rod
對不起。我不知道這個,因爲BindingListCollectionView確實支持排序。請參閱[這裏](http://msdn.microsoft.com/en-us/library/system.windows.data.bindinglistcollectionview.sortdescriptions.aspx)。 – LPL
謝謝你的鏈接,LPL。我明白你的意思,BindingListCollectionView確實支持排序。我到達這裏,但可能是因爲數據源來自EF嗎?排序來自EF的集合的唯一方法是使用LINQ表達式?我們寧願使用XAML。 – Rod