• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#-WPF之后台实现数据绑定,不修改xaml文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

小白入门,看到各种大神一顿操作,越看越懵逼,自己摸索半天终于找到了一个不修改xaml文件的数据绑定套路,深入的原理没搞明白,反正这样一顿套路操作就能实现数据绑定

下面以将电脑的串口名绑定到ComboBox为例,记录一下数据绑定:

1.先创建一个class用来包含需要绑定的数据

  四个重要点:1.类要继承自“: INotifyPropertyChanged”

        2.类里添加一句话 public event PropertyChangedEventHandler PropertyChanged;

        3.创建数据的get、set

        4.set里增加属性更改函数

代码如下:

 1 public class Ports : INotifyPropertyChanged
 2     {
 3         public event PropertyChangedEventHandler PropertyChanged;
 4 
 5         private string[] _comports;//定义串口端口
 6         public string[] comports
 7         {
 8             get
 9             {
10                 return _comports;
11             }
12             set
13             {
14                 _comports = value;
15                 if (PropertyChanged != null)
16                 {
17                     PropertyChanged(this, new PropertyChangedEventArgs("comports"));
18                 }
19             }
20         }
21 
22     }

2.将数据绑定到要显示的控件上

  几个重要点:1.把步骤1创建的类实例化

        2.实例化绑定类

        3.设置绑定数据源

        4.设置绑定数据路径

        5.将数据绑定到控件

代码如下:

 1 public partial class MainWindow : Window
 2     {
 3         Ports p = new Ports();
 4         public MainWindow()
 5         {
 6             InitializeComponent();
 7 
 8             Binding binding = new Binding();
 9             binding.Source = p;
10             binding.Path = new PropertyPath("comports");
11             this.ComPort.SetBinding(ComboBox.ItemsSourceProperty, binding);
12         }
13     }

3.通过操作数据更改控件显示(refresh是一个鼠标按下事件)

1 private void refresh(object sender, EventArgs e)
2         {
3             string[] ArryPort = SerialPort.GetPortNames();
4             p.comports = ArryPort;
5         }

4.全部代码如下

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.IO.Ports;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 using System.Windows;
 9 using System.Windows.Controls;
10 using System.Windows.Data;
11 using System.Windows.Documents;
12 using System.Windows.Input;
13 using System.Windows.Media;
14 using System.Windows.Media.Imaging;
15 using System.Windows.Navigation;
16 using System.Windows.Shapes;
17 
18 namespace 调试工具
19 {
20     /// <summary>
21     /// MainWindow.xaml 的交互逻辑
22     /// </summary>
23     public partial class MainWindow : Window
24     {
25         Ports p = new Ports();
26         public MainWindow()
27         {
28             InitializeComponent();
29 
30             Binding binding = new Binding();
31             binding.Source = p;
32             binding.Path = new PropertyPath("comports");
33             this.ComPort.SetBinding(ComboBox.ItemsSourceProperty, binding);
34         }
35 
36 
37         private void refresh(object sender, EventArgs e)
38         {
39             string[] ArryPort = SerialPort.GetPortNames();
40             p.comports = ArryPort;
41         }
42     }
43     public class Ports : INotifyPropertyChanged
44     {
45         public event PropertyChangedEventHandler PropertyChanged;
46 
47         private string[] _comports;//定义串口端口
48         public string[] comports
49         {
50             get
51             {
52                 return _comports;
53             }
54             set
55             {
56                 _comports = value;
57                 if (PropertyChanged != null)
58                 {
59                     PropertyChanged(this, new PropertyChangedEventArgs("comports"));
60                 }
61             }
62         }
63 
64     }
65 }

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap