掘金 后端 ( ) • 2024-03-28 16:18

highlight: a11y-dark

之前一直在用winform,但是感觉界面不好看,然后就自己在网上学习WPF。一开始看到DataGrid的时候,还以为它是DataGridView,然后用winform的方法绑定数据发现不行,在不断的查找之后,终于学会了怎么简单的绑定数据。

工具:VStudio2022 框架:.net framework 4.8

新建一个WPF窗体,再把DataGrid拖到窗体上之后,在.xaml那给它配置name属性dataGrid

由于我是想自己手动建列,所以把AutoGenerateColumns属性设置为false,如果不想手动设置列,直接默认为true就好了

随后新建三列

添加完成之后,新建一个类,这个类就是要绑定到DataGrid的实体, 新建Person类

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string City { get; set; }
}

建完之后,给刚刚那三列绑定Person的属性 (这里就很麻烦,必须要手动绑定,如果不是建的列,就不需要绑定)

<DataGridTextColumn Binding ="{ Binding Name }" Header="第一个文本"/>
<DataGridTextColumn Binding ="{ Binding Age }" Header="第二个文本"/> 
<DataGridTextColumn Binding ="{ Binding City }" Header="第三个文本"/>

绑定完之后,去到这个xaml的cs代码那里,在窗体类下面将Person实例化: ObservableCollection<Person> People = new ObservableCollection<Person>();

这里用的是ObservableCollection,问的AI,解释是 “这里使用了 ObservableCollection 而不是普通的集合类型,因为 ObservableCollection 实现了 INotifyCollectionChanged 接口,这意味着当集合中的项发生变化时,UI 将自动更新以反映这些变化。” 我理解的是当People里面的数据发生变化后,DataGrid界面上也会发生变化;我一开始用的是List,但是这样的话,People的数据发生变化了,DataGrid界面却不会发生变化。

然后在初始化的时候,给People增加一些初始数据

People = new ObservableCollection<Person>()
{
    // 预先添加一些示例数据
    new Person() { Name = "张三", Age = 30, City = "北京" },
    new Person() { Name = "李四", Age = 28, City = "上海" }
};
//第二种添加方式
//People.Add(new Person() { Name = "张三", Age = 30, City = "北京" });
 //People.Add(new Person() { Name = "李四", Age = 25, City = "上海" });

dataGrid.ItemsSource = People;

然后直接绑定到dataGrid上 dataGrid.ItemsSource = People;

运行效果图:

然后增加一个点击按钮事件那里加上 People.Add(new Person() { Name = "新用户", Age = 25, City = "广州" });

.cs代码截图: