我是靠谱客的博主 魁梧世界,这篇文章主要介绍WPF学习分享(一)——DataGrid,现在分享给大家,希望可以做个参考。

使用DataGrid构建简单的表格

最近由于想做一个Windows的桌面应用程序,正好最近看了一下C#,在网上找了一下关于Windwos桌面应用的相关文件,最后选择使用WPF来开发。


使用DataGrid用到的功能

  1. DataGrid通过使用数据绑定,实现数据的双向通知。
  2. 在DataGrid的DataGridComboBoxColumn使用枚举。
  3. DataGrid的自定义Cell的使用。
  4. DataGrid多出的一行的去除。

首先定义一个Model,省略了部分代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public enum Sexs {,}; public enum Roles { 非法用户,全权用户, 可写用户,只读用户 }; public delegate void change(User user); //实现接口以进行数据绑定 public class User : INotifyPropertyChanged { private String _name; //使用了委托,在单元格的值改变的时候调用委托,。, //本来是可以直接写在监听属性变化的 //但是由于得到数据的时候也会触发OnPropertyChanged() //所以就打算单独使用delegate //应该有更好的实现方法,暂时没发现 public event change Change; #region 属性 public String Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged(); } } } //省略。。。。。 #endregion public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); Change?.Invoke(this); } }

然后就是View层的实现了。

  1. 先是数据绑定,通过使用标签的Binding属性,将上面的Model的字段对应到单元格上。
  2. 然后是枚举的使用。首先要引入枚举类型,使用xmlns:assembly="clr-namespace:System;assembly=mscorlib"引入,用到的枚举只要在xmlns:local="clr-namespace:AdressBook"这个命名空间下就可以了。
  3. 日期的格式化输出(与字符格式化输出同理),通过在Binding里面使用StringFormat='{}{0:yyyy年MM月dd日}',ConverterCulture=zh-CN即可。
  4. 如果要自定义GridData的单元格的内容,像是添加按钮什么的,可以使用标签DataGridTemplateColumn
  5. DataGrid的在显示的时候会自动生成最后一行,倒是展示的时候多了一行,可以通过设置DataGridCanUserAddRows的值为false,由于我直接在xaml设置的时候会警告,所以我就在Controller里面设置了。。。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<UserControl x:Class="AdressBook.UserList" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:AdressBook" xmlns:assembly="clr-namespace:System;assembly=mscorlib" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="800"> <UserControl.Resources> <ObjectDataProvider x:Key="SexEnum" MethodName="GetValues" ObjectType="{x:Type assembly:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="local:Sexs"/> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </UserControl.Resources> <DataGrid x:Name="data" AutoGenerateColumns="False" > <DataGrid.Columns> <!--<DataGridCheckBoxColumn Width="44" Header="" Binding="{Binding IsSelected}"/>--> <DataGridTextColumn Width="80" Header="ID" Binding="{Binding id}"/> <DataGridComboBoxColumn Width="80" Header="性别" ItemsSource="{Binding Source={StaticResource SexEnum}}" SelectedItemBinding="{Binding Sex}"/> <DataGridTextColumn Width="80" Header="生日" Binding="{Binding Birthday,StringFormat='{}{0:yyyy年MM月dd日}',ConverterCulture=zh-CN}"/> <DataGridTemplateColumn Header="" Width="44"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="评论" Click="CommentAction"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </UserControl>

最后就是Controller的实现了。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public partial class UserList : UserControl { static ObservableCollection<User> list; public UserList() { InitializeComponent(); list = new ObservableCollection<User>(Mapper.GetInstance().Select()); foreach (User u in list) { //使用委托 u.Change += change; } //设置数据源 data.DataContext = list; //让DataGrid的最后一行消失 data.CanUserAddRows = false; } private void ViewComment(object sender, RoutedEventArgs e) { ......... } //数据改变的时候的操作 void change(User user) { ........ } }

最后

以上就是魁梧世界最近收集整理的关于WPF学习分享(一)——DataGrid的全部内容,更多相关WPF学习分享(一)——DataGrid内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部