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));
}
View Code
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;
                
            }

        }
View Code

 

 

属性

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>
View Code
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()
        {
           
        }
    }
}
View Code
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");
            }
        }
    }
}
View Code

 

posted @ 2020-12-20 21:50  KnowledgePorter  阅读(147)  评论(0)    收藏  举报