WPF DataGrid 之數(shù)據(jù)綁定1. Auto generation of columns 最簡單的方法莫過于讓DataGrid根據(jù)數(shù)據(jù)源中的字段自動生成列了: 根據(jù)實體類的公共屬性, 能夠自動生成四種類型的數(shù)據(jù)列,,對應(yīng)關(guān)系如下: TextBox columns for string values; CheckBox columns for boolean values; ComboBox columns for enumerable values; Hyperlink columns for Uri values;
拖個DataGrid放在Window中,, 把他的ItemsSource綁定到數(shù)據(jù)源上 如:ItemsSource="{Binding Customers}" 注意:一定要把AutoGenerateColumns的值改為True, 默認拖上去時此屬性的值為False.
2. Manually define columns 設(shè)置AutoGenerateColumns為False, 那么一切就要靠自己了! 此時需要在xaml文件中編輯DataGrid.Columns,。 同樣我們可以這樣對應(yīng)數(shù)據(jù)類型: DataGridCheckBoxColumn for boolean values; DataGridComboBoxColumn for enumerable values; DataGridHyperlinkColumn for Uri values; DataGridTextColumn to show text values;
Import for customer defined columns DataGridTemplateColumn to show any types of data by defining your own cell template. 比如要定義一個顯示圖片的列: <DataGrid.Columns> 3. Selection 通過設(shè)置DataGrid的SelectionMode,SelectionUnit屬性,,可以控制運行時我們能過選中的Cell or Row 的模式。 SelectionMode.Single 每次只能選中單行,; SelectionMode.Extended 可以選中多行,; SelectionUnit.Cell 每次只能選中cell; SelectionUnit.FullRow 每次只能選中row; SelectionUnit.CellorRowHeader 可選中cell,也可通過RowHeader選中row. 4. Column sorting, reordering and resizing 我們可以通過幾個簡單的屬性實現(xiàn)很酷的功能: CanUserReorderColumns enables or disables column re-ordering CanUserResizeColumns enables or disables column resizing CanUserResizeRows enables or disables row resizing CanUserSortColumns enables or disables column sorting These properties’ default values are “True”, like: <DataGrid ItemsSource="{Binding Customers}"
CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserResizeRows="True” CanUserSortColumns="True"/> 5. Grouping 首先要使用能夠分組的數(shù)據(jù)源,,見demo. Like this: GroupedCustomers = new ListCollectionView(Customers); 重要的是你還要在xaml文件中定義模板來顯示分組,, It should be like this: <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding GroupedCustomers}">
6. Row Details 這個比較好搞,只要設(shè)置 RowDetailsTemplate就可以了,! It is like this: <DataGrid.RowDetailsTemplate> 通過實現(xiàn) 代碼有點多,,like bellow: public class GenderTemplateSelector : DataTemplateSelector { public DataTemplate MaleTemplate { get; set; } public DataTemplate FemaleTemplate { get; set; } public override DataTemplate SelectTemplate(object item, DependencyObject container) { var customer = item as Customer; if (customer == null) return base.SelectTemplate(item, container); if( customer.Gender == Gender.Male) { return MaleTemplate; } return FemaleTemplate; } } <l:GenderTemplateSelector x:Key="genderTemplateSelector"> <l:GenderTemplateSelector.MaleTemplate> <DataTemplate> <Grid Background="LightBlue"> <Image Source="{Binding Image}" Width="50" /> </Grid> </DataTemplate> </l:GenderTemplateSelector.MaleTemplate> <l:GenderTemplateSelector.FemaleTemplate> <DataTemplate> <Grid Background="Salmon"> <Image Source="{Binding Image}" Width="50" /> </Grid> </DataTemplate> </l:GenderTemplateSelector.FemaleTemplate> </l:GenderTemplateSelector> <DataGrid ItemsSource="{Binding Customers}" RowDetailsTemplateSelector="{StaticResource genderTemplateSelector}" /> 7. Alternating BackgroundBrush 可以通過AlternatingRowBackground and AlternationCount 兩個屬性輕松實現(xiàn)隔行背景色,。
8. Frozen Columns 通過設(shè)置FrozenColumnCount 屬性,可以控制Frozen Columns. 數(shù)字 1 對應(yīng)第一列,,2 對應(yīng)第二列,,以此類推
9. Headers visbility 使用HeadersVisibility控制是否顯示列頭。
參考文章:http://www./DataGrid.html Demo請從參考文章處下載,。 |
|