使用CollectionView實現對綁定數據的排序、篩選、分組_第1頁
使用CollectionView實現對綁定數據的排序、篩選、分組_第2頁
使用CollectionView實現對綁定數據的排序、篩選、分組_第3頁
使用CollectionView實現對綁定數據的排序、篩選、分組_第4頁
使用CollectionView實現對綁定數據的排序、篩選、分組_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1234567891011121314151617181920212223242526272829nter3031323334353637383940一、數據的排序:使用第二十四節的數據源,查詢所有的產品信息:〈Windowx:Class="WPF_24.CollectionViewSortData"xmlns="/winfx/2006/xaml/presentation"xmlns:x="/winfx/2006/xaml"xmlns:lib="clr-namespace:WPF_24_Library;assembly=WPF_24_Library"Title="CollectionViewSortData"Height="300"Width="500"><Window.Resources><ObjectDataProviderx:Key="myDataSource"ObjectType="{x:Typelib:DataControl}"MethodName="GetAllProductInfo"/></Window.Resources><GridMargin="5"><Grid.RowDefinitions><RowDefinition/><RowDefinitionHeight="50"/></Grid.RowDefinitions><ListBoxGrid.Row="0"DataContext="{StaticResourcemyDataSource}"ItemsSource="{Binding}"><ListBox.ItemTemplate><DataTemplate><WrapPanel><TextBlockText="{BindingPath=ProductID}"Width="50"/><TextBlockText="{BindingPath=ProductName}"Width="300"/><TextBlockText="{BindingPath=UnitPrice}"Width="50"/></WrapPanel></DataTemplate></ListBox.ItemTemplate></ListBox><WrapPanelGrid.Row="1"VerticalAlignment="Center"HorizontalAlignment="Ce><TextBlockText="第一排序:"VerticalAlignment="Center"/><ComboBoxSelectedIndex="0"Width="80"x:Name="cmbColumnA"><ComboBox.Items><ComboBoxItemTag="ProductID">產品編號</ComboBoxItem><ComboBoxItemTag="ProductName">產品名稱</ComboBoxItem><ComboBoxItemTag="UnitPrice">產品單價</ComboBoxItem></ComboBox.Items></ComboBox><TextBlockText="第二排序:"VerticalAlignment="Center"/><ComboBoxSelectedIndex="0"Width="80"x:Name="cmbColumnB"><ComboBox.Items>41:<ComboBoxItemTag="ProductID">產品編號</ComboBoxItem>42:<ComboBoxItemTag="ProductName">產品名稱41:<ComboBoxItemTag="ProductID">產品編號</ComboBoxItem>42:<ComboBoxItemTag="ProductName">產品名稱</ComboBoxItem>43:<ComboBoxItemTag="UnitPrice">產品單價</ComboBoxItem>44:</ComboBox.Items>45:</ComboBox>46:47:</WrapPanel>48:</Grid><ButtonContent="排序"Margin="10,0,0,0"Click="Button_Click"/>49:</Window>實現對數據的排序,使用的是CollectionView對象中的SortDescriptions集合屬性,其包含多個SortDescription對象,按照其先后順序對數據實現排序。注意SortDescription對象的構造方法的兩個參數,第一個參數是字符串類型的,表示數據類型中的某個屬性的屬性名,其屬性的類型必須實現IComparable接口,即實現相應的排序規則;第二參數是ListSortDeirection枚舉,表示排序的順序是正序還遇倒序。本例應在按鈕的Click事件中定義如下的代碼:1:privatevoidButton_Click(objectsender,RoutedEventArgse)2:3://3://獲取數據源適配器4:5:6://4:5:6://獲取數據源ObjectDataProviderprovider=(ObjectDataProvider)this.FindResource("myDataSource"));7:9://7:9://獲取數據源對應的CollectionViewList<ProductInfo>collections=(List<ProductInfo>)(provider.Data);8:10:11://10:11://清除原有的排序ICollectionViewview=CollectionViewSource.GetDefaultView(collections);12:14://12:14://獲取要排序的兩個列的列名view.SortDescriptions.Clear();13:15:stringfirstColumn=((ComboBoxItem)(cmbColumnA.SelectedItem)).Tag.ToString15:();16:stringsecendColumn=((ComboBoxItem)(cmbColumnB.SelectedItem)).Tag.ToString16:();1718if(view.CanSort)1920//添加排序規則(注意添加的順序)21view.SortDescriptions.Add(22newSortDescription(firstColumn,ListSortDirection.Ascending));23view.SortDescriptions.Add(18if(view.CanSort)1920//添加排序規則(注意添加的順序)21view.SortDescriptions.Add(22newSortDescription(firstColumn,ListSortDirection.Ascending));23view.SortDescriptions.Add(2425newSortDescription(secendColumn,ListSortDirection.Ascending));應用程序執行這后的效果如圖:■Co1lectionViewSortData回54Tourtiere7450075Rh?nbr?uKlostefbier7.7500023Tunnbr?d9000019TeatineChocolateBiscuits9200045Rogedesild9.500047Zaansekoeken9.500041.ack'=NewE^qlandClamChowder9.65003AniseedSyrup10.000074Longlife一Su10.000021RcHdney'sScones10.000046Spegesild12.000031GcngonzslaTelino12.5000j>~nr- ■■*i■ i II-tri-ccc簫一排序:|產品單價▼慵二排序:|產品名稱d函二、實現對數據的篩選實現對數據的篩選使用的是CollectionView對象的Filter屬性,Filter屬性的類型是Predicate<object>委托,其要求綁定的方法返回一個布爾值,系統將依據其返回的布爾值篩選數據,使得篩選后的所有數據滿足使方法返回True。例如,在前面的例子中添加對單價的篩選條件:1:<!--在界面中添加Grid的一行,并在此行中添加篩選數據所需的界面元素,省略其他代碼-->2:<WrapPanelGrid.Row="2"VerticalAlignment="Center"HorizontalAlignment="Center">3: <TextBlockText="產品單價范圍:"/>4: <TextBoxWidth="50"x:Name="lowPrice"/>5: <TextBlockText="~"/>6: <TextBoxWidth="50"x:Name="highPrice"/>7: <ButtonContent="篩選"Margin="10,0,0,0"Click="Button_Click_1"/>8:</WrapPanel>在按鈕的Click事件中定義如下代碼:1:privatevoidButton_Click_1(objectsender,RoutedEventArgse)2:{3: //獲取數據源適配器4: ObjectDataProviderprovider=5: (ObjectDataProvider)this.FindResource("myDataSource"));6: //獲取數據源7: List<ProductInfo>collections=(List<ProductInfo>)(provider.Data);8:9: //獲取數據源對應的CollectionView10: ICollectionViewview=CollectionViewSource.GetDefaultView(collections);11:12: if(view.CanFilter)

13: {14: //綁定數據篩選的條件15: view.FilternewPredicate<object>(dataFilter);16: }17:}18:19://數據篩選的條件20:privatebooldataFilter(objectobj)21:{22: decimallow=decimal.Parse(lowPrice.Text);23: decimalhigh=decimal.Parse(highPrice.Text);24:25: ProductInfoinfo=(ProductInfo)obj;26:27: returninfo.UnitPrice>=low&&info.UnitPrice<=high;28:}執行的結果如圖所示,從中也可以看出,篩選可以和排序一起使用23Tunnbr?d9.000019TeatineChocolateBiscuits9200045Rogedesild9.500047Zaansekoeken9.500041.ack'=NewEnglandClamChowder9.65003AniseedSyrup10.000021印Rodney'sScones10.000074Longlife一Su10.000046Ssegesild12.0000ICollectionViewSortData<=.回第一排序:|產品單粉▼慌二排序:|產品編號J兩三、實現數據分組實現數據分組,使用的是CollectionView的GroupDescriptions集合屬性,其包含的元素是GroupDescription抽象類對象,在Framework中,系統定義了一個GroupDescription的子類PropertyGroupDescription,實現根據數據的某屬性進行分組的功能。

.[INotifyPropertyChangedGraupDescnptionAbstractClass2APropertyGroupDescription$Class-cGroupDescription例如,實現對于產品單價的分組:在XAML的Grid中添加一行,添加對于分組的顯示:1:<!--實現分組的操作,省略其他代碼-->2:<WrapPanelGrid.Row="3"VerticalAlignment="Center"HorizontalAlignment="Center">3: <TextBlockText="分組條件:"/>4: <RadioButtonContent="按單價分組"IsChecked="True"Checked="GroupByUnitPrice_Checked"/>5: <RadioButtonContent="按名稱分組"Checked="GroupByProductName_Checked"/>6:</WrapPanel>在后臺CS文件中,實現GroupByUnitPrice_Checked方法,實現根據UnitPrice分組:1:privatevoidGroupByUnitPrice_Checked(objectsender,RoutedEventArgse)2:{3: //獲取數據源適配器4: ObjectDataProviderprovider=5: (ObjectDataProvider)this.FindResource("myDataSource"));6: //獲取數據源7: List<ProductInfo>collections=(List<ProductInfo>)(provider.Data);8:9: //獲取數據源對應的CollectionView10: ICollectionViewview=CollectionViewSource.GetDefaultView(collections);11:12: if(view.CanGroup)13: {14: view.GroupDescriptions.Clear();15: view.GroupDescriptions.Add(16: newPropertyGroupDescription("UnitPrice"));17: }18:}執行的結果如下:

>1CollectionViewSortDataCZI回1ClhaiIB.0000-35SteeleyeStoutIB.0000□39CihartreuseverteIB.000076L3klcalik??riIB.00002Clha^g19.000036InlagdSill19.0000mAniseedSyrup10.000021£irRodney'sScones10.000074Longlife一Su10.00004ClhefAnton'sCajunSeasoninq22.0000第一排序:I產品編號■俺二排序:|產品編號d而產品單價范園: ~ 阻分紀條件:令按單價分紀按名稱分紀定義分組樣式:可以添加ListBox的GroupStyle,以顯示分組的樣式:例如:使用默認的分組樣式:1:<ListBox...>2: <!—...—>3: <ListBox.GroupStyle>4: <x:StaticMember="GroupStyle.Default"/>5: </ListBox.GroupStyle>6:</ListBox>執行的結果如下:67CoIlectionViewSortData ,1=1回18.0000Cha' le.ooooSteeleyeStout IE.000039 Chartreuseverte 18.000076 Lakkalik??ri 18.000019.0000Chrg 19.0000InlagdSill 19.000010.0000AniseedSyrup 10.0000O簫一排序:=品制號▼慎二排序:=?■尋▼ 排序|產品單價范園: - 辰*分組條件:o按單價分組按名稱分紀

還可以自定義分組樣式,例如:1:<ListBox.GroupStyle>2: <!--<x:StaticMember="GroupStyle.Default"/>-->3: <GroupStyle>4: <GroupStyle.HeaderTemplate>5: <DataTemplate>6: <TextBlockBackground="#DDD"Foreground="#333"FontWeight="Bold">7: <TextBlockText="{BindingPath=Name}"/>8: <TextBlockText="{BindingPath=ItemCount}"/>)9: </TextBlock>10: </DataTemplate>11: </GroupStyle.HeaderTemplate>12: </GroupStyle>13:</ListBox.GroupStyle>執行結果如下:回CoIlectionViewSortData .1=1I回L自定義分組條件:可以通過定義值轉換器的方式自定義分組的條件。例如,按產品名稱分組時,按照產品名稱的第一個字母進行分組,而不是按照完整的名稱分組。定義ProductNameGroupConverter類,實現IValueConverter接口:1:usingSystem;2:usingSystem.Globalization;3:usingSystem.Windows.Data;4:5:namespaceWPF_24

7: publicclassProductNameGroupConverter:IValueConverter8: {9: publicobjectConvert(objectvalue,TypetargetType,objectparameter,CultureInfoculture)10: {11: //將包含產品名稱的Object對象value轉換為字符串12: stringval=(string)value;13:14: returnval.Substring(0,1)+"...";TOC\o"1-5"\h\z15: }16:17: publicobjectConvertBack(objectvalue,TypetargetType,objectparameter,CultureInfoculture)18: {19: thrownewNotImplementedException()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論