WPF DataGrid 模板
样式
<Style x:Key="GridStyle" TargetType="DataGrid"> <Setter Property="BorderBrush" Value="Gray"></Setter> <Setter Property="CellStyle"> <Setter.Value> <Style TargetType="DataGridCell"> <Setter Property="BorderThickness" Value="0"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="DataGridCell"> <Border BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Border> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Background" Value="Silver"></Setter> </Trigger> <Trigger Property="IsSelected" Value="true"> <Setter Property="Background" Value="SlateGray"></Setter> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="ColumnHeaderStyle"> <Setter.Value> <Style TargetType="DataGridColumnHeader"> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="HorizontalAlignment" Value="Center"></Setter> <Setter Property="Height" Value="50"></Setter> </Style> </Setter.Value> </Setter> <Setter Property="RowStyle"> <Setter.Value> <Style TargetType="DataGridRow"> <Setter Property="Height" Value="30"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="Foreground" Value="Black"></Setter> <Style.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Background" Value="Silver"></Setter> </Trigger> <Trigger Property="IsSelected" Value="true"> <Setter Property="Background" Value="SlateGray"></Setter> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> </Style>
重要属性
CanUserSortColumns="False"
HeadersVisibility="Column"
ColumnWidth="*" <用于去掉空白列>
SelectionMode="Extended"
CanUserAddRows="False"
AutoGenerateColumns="False"
VerticalScrollBarVisibility="Auto"
SelectionChanged="Fragment_database_SelectionChanged"
标记
<DataGrid Margin="5" Name="Fragment_database" CanUserSortColumns="False" HeadersVisibility="Column" ItemsSource="{Binding }" ColumnWidth="*" SelectionMode="Extended" CanUserAddRows="False" AutoGenerateColumns="False" VerticalScrollBarVisibility="Auto" SelectionChanged="Fragment_database_SelectionChanged"> <DataGrid.Columns> <DataGridTextColumn ElementStyle="{StaticResource DataGridTextColumnCenterStyle}" Header="生产年份" Width="58" Binding="{Binding Longitude,Mode=TwoWay}" ></DataGridTextColumn> <DataGridTextColumn ElementStyle="{StaticResource DataGridTextColumnCenterStyle}" Header="尺寸" Width="58" Binding="{Binding Latitude,Mode=TwoWay}"></DataGridTextColumn> <DataGridTextColumn ElementStyle="{StaticResource DataGridTextColumnCenterStyle}" Header="半长轴" Width="58" Binding="{Binding Speed,Mode=TwoWay}"></DataGridTextColumn> <DataGridTextColumn ElementStyle="{StaticResource DataGridTextColumnCenterStyle}" Header="轨道倾角" Width="58" Binding="{Binding Time,Mode=TwoWay}"></DataGridTextColumn> <DataGridTextColumn ElementStyle="{StaticResource DataGridTextColumnCenterStyle}" Header="升交点赤经" Width="70" Binding="{Binding Turning_Radius,Mode=TwoWay}"></DataGridTextColumn> <DataGridTextColumn ElementStyle="{StaticResource DataGridTextColumnCenterStyle}" Header="类型" Width="58" Binding="{Binding Turning_Radius,Mode=TwoWay}"></DataGridTextColumn> <DataGridTextColumn ElementStyle="{StaticResource DataGridTextColumnCenterStyle}" Header="备注" MinWidth="100" Binding="{Binding Turning_Radius,Mode=TwoWay}"></DataGridTextColumn> </DataGrid.Columns> </DataGrid>
逻辑
List<Tuple<double, double, double, DateTime, double, Color>> moveposlist; moveposlist = shipPM.MovetPosData; MovePos_table.ItemsSource = Move_Pos_list; for (int i = 0; i < moveposlist.Count; i++) { Move_Pos_list.Add(new MovePos_member(moveposlist[i].Item1, moveposlist[i].Item2, moveposlist[i].Item3, moveposlist[i].Item4, moveposlist[i].Item5, moveposlist[i].Item6, true)); }
private ObservableCollection<MovePos_member> move_pos_list; public ObservableCollection<MovePos_member> Move_Pos_list { set { move_pos_list = value; } get { if (move_pos_list == null) move_pos_list = new ObservableCollection<MovePos_member>(); return move_pos_list; } } public class MovePos_member : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private double longitude; public double Longitude { get { return longitude; } set { longitude = value; if (PropertyChanged != null) this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Longitude")); } } private double latitude; public double Latitude { get { return latitude; } set { latitude = value; if (PropertyChanged != null) this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Latitude")); } } private double speed; public double Speed { get { return speed; } set { speed = value; if (PropertyChanged != null) this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Speed")); } } private DateTime time; public DateTime Time { get { return time; } set { time = value; this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Time")); } } private double turning_radius; public double Turning_Radius { get { return turning_radius; } set { turning_radius = value; if (PropertyChanged != null) this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Turning_Radius")); } } private Color _color; public Color _Color { get { return _color; } set { _color = value; if (PropertyChanged != null) this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("_Color")); } } private bool is_enabled; public bool Is_Enabled { get { return is_enabled; } set { is_enabled = value; if (PropertyChanged != null) this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Is_Enabled")); } } public MovePos_member(double lon, double lat,double speed,DateTime time, double turning_radius, Color c ,bool i_e) { longitude=lon; latitude = lat; this.speed = speed; this.time = time; this.turning_radius = turning_radius; _color = c; is_enabled = i_e; } }
属性
isReadOnly只读
方法
SelectAll()选中所有
UnSelectAll()取消选中所有
列的文本居中
<!--列的文本居中-->
<Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
<DataGrid.ColumnHeaderStyle>
<!--使每一列的头部标题居中-->
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center">
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid AutoGenerateColumns="False" GridLinesVisibility="None" CanUserDeleteRows="False" CanUserAddRows="False" Margin="0,4" Grid.Row="1" FontSize="16" ItemsSource="{Binding DishMenus}"> <DataGrid.Columns> <DataGridTextColumn Header="菜品" Binding="{Binding Dish.Name}" Width="120"/> <DataGridTextColumn Header="种类" Binding="{Binding Dish.Category}" Width="120"/> <DataGridTextColumn Header="点评" Binding="{Binding Dish.Comment}" Width="120"/> <DataGridTextColumn Header="推荐分数" Binding="{Binding Dish.Score}" Width="120"/> <DataGridTemplateColumn Header="选中" SortMemberPath="IsSelected" Width="120"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Path=IsSelected,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Center" Command="{Binding Path=DataContext.SelectMenuItemCommand,RelativeSource={RelativeSource Mode=FindAncestor ,AncestorType={x:Type DataGrid}}}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid>
namespace CrazyElephent.Client.ViewModels { class MainWindowViewModel: BindableBase { public DelegateCommand SelectMenuItemCommand { get; set; } private List<DishMenuItemViewModel>dishMenus; public List<DishMenuItemViewModel>DishMenus { get { return dishMenus; } set { dishMenus = value; this.RaisePropertyChanged("DishMenus"); } } private void LoadDishMenu() { XmlDataService ds = new XmlDataService(); var dishes = ds.GetAllDishes(); this.DishMenus = new List<DishMenuItemViewModel>(); foreach(var dish in dishes) { DishMenuItemViewModel item = new DishMenuItemViewModel(); item.Dish =dish; this.DishMenus.Add(item); } } public MainWindowViewModel() { this.LoadDishMenu(); this.SelectMenuItemCommand = new DelegateCommand(new Action(this.SelectMenuItemCommandExecute)); } private void SelectMenuItemCommandExecute() { } } }
namespace CrazyElephent.Client.ViewModels { class DishMenuItemViewModel: BindableBase { //在 Prism.Mvvm中的BindableBase 类替代NotifcationObject 。NotificationObject 和 NotificationObject 类在Prism程序集中被标记为过时。 public Dish Dish { get; set; } private bool isSelected; public bool IsSelected { get { return isSelected; } set { isSelected = value; this.RaisePropertyChanged("IsSelected"); } } } }

浙公网安备 33010602011771号