狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】在Winform中如何實現雙向數據綁定?

admin
2024年3月31日 0:57 本文熱度 719

什么是雙向數據綁定?

雙向數據綁定是一種允許我們創建持久連接的技術,使模型數據和用戶界面(UI)之間的交互能夠自動同步。這意味著當模型數據發生變化時,UI會自動更新,反之亦然。這種雙向數據綁定極大地簡化了UI和模型數據之間的同步,使開發者可以更專注于業務邏輯,而不是手動處理UI和數據的同步。

不使用雙向綁定的示例

今天我想通過winform中DataGridView控件為例,介紹在winform中如何實現雙向數據綁定。

一般在winform中使用DataGridView控件時,我們可能是這樣使用的:

創建數據源(以Person類為例):

  public class Person
  {
      public string? Name { getset; }
      public string? Home { getset; }
  }

創建Person對象列表:

  // 創建一個Person對象的列表
  List<Person> people = new List<Person>()
  {
      new Person {Name = "張三",Home = "武漢" },
      new Person {Name = "李四",Home = "南昌" },
      new Person {Name = "王五",Home = "福州" },
  };

綁定數據源:

dataGridView1.DataSource = people;

這個時候的效果如下所示:

當我們進行修改之后,如下所示:

現在打印people列表第一個和第二個person對象的Home屬性值看看:

  Debug.WriteLine(people[0].Home);
  Debug.WriteLine(people[1].Home);

結果如下圖所示:

說明在dataGridView1上修改數據,people列表也被修改了。

現在反過來測試一下,修改people列表第一個和第二個person對象的Home屬性值:

 people[0].Home = "廈門";
 people[1].Home = "廈門";

會發現dataGridView1上的數據不會發生變化,需要我們點擊對應的空格之后才會發生改變,如下所示:

如果我們這樣寫的話:

 people[0].Home = "廈門";
 people[1].Home = "廈門";
 dataGridView1.UpdateCellValue(1,1);
 dataGridView1.UpdateCellValue(1,2);

效果如下所示:

只改變了一個空格的值,另一個還是需要點擊一下才更新。

在winform中實現雙向數據綁定示例

首先創建一個Student類,如下所示:

 public class Student : INotifyPropertyChanged
 {
    
     private string? _name;

     public string Name
     {
         get { return _name; }
         set
         {
             _name = value;
             // Call OnPropertyChanged whenever the property is updated
             OnPropertyChanged("Name");
         }
     }       
     private string? _home;

     public string Home
     {
         get { return _home; }
         set
         {
             _home = value;
             // Call OnPropertyChanged whenever the property is updated
             OnPropertyChanged("Home");
         }
     }

     // Declare the event
     public event PropertyChangedEventHandler? PropertyChanged;
     // Create the OnPropertyChanged method to raise the event
     protected void OnPropertyChanged(string name)
     {
         var handler = PropertyChanged;
         handler?.Invoke(thisnew PropertyChangedEventArgs(name));
     }
 }

實現了INotifyPropertyChanged接口。

創建數據源:

 // 創建一個Student對象的列表
 BindingList<Student> students = new BindingList<Student>()
 {
         new Student { Name = "張三", Home = "武漢" },
         new Student { Name = "李四", Home = "南昌"  },
         new Student { Name = "王五", Home = "福州"  },
 };

注意這里使用的是BindingList<T>而不是List<T>

BindingList<T>List<T>的區別

BindingList和 List都是用于存儲對象的集合,但它們之間有一些關鍵的區別。

  1. 數據綁定支持:BindingList是為數據綁定設計的,它實現了 IBindingList 接口。這意味著當 BindingList中的數據發生更改時(例如,添加、刪除或修改項),它會自動通知綁定到它的任何 UI 控件。這對于 Windows Forms 或 WPF 這樣的 UI 框架非常有用,因為它們可以自動更新以反映數據的更改。相比之下,List不支持數據綁定。
  2. 事件通知:BindingList提供了一些額外的事件,如 ListChanged,這可以讓你知道列表何時被修改。List沒有這樣的事件。
  3. 性能:由于 BindingList提供了額外的功能,所以在某些情況下,它可能比 List慢一些。如果你不需要數據綁定或更改通知,那么 List可能會提供更好的性能。

綁定數據源:

   dataGridView1.DataSource = students;

更改數據源的值,查看UI是否會自動改變:

 students[0].Home = "廈門";
 students[1].Home = "廈門";  

實現的效果如下所示:

發現當數據的值發生改變時,dataGridView1會自動進行更新。

編輯dataGridView1查看數據源是否會發生改變,編輯之后如下圖所示:

查看結果:

 Debug.WriteLine(students[0].Home);
 Debug.WriteLine(students[1].Home);

結果如下圖所示:

說明編輯dataGridView1產生的更改也會導致數據源的更改。

總結

以上就是在winform中實現雙向數據綁定的一次實踐,要點有兩個,第一個是類實現INotifyPropertyChanged,第二個是用BindingList<T>代替List<T>,希望對你有所幫助。


該文章在 2024/3/31 0:57:15 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved