Data binding là gì

  -  

Data binding là một công cụ rất mạnh của winform nhưng thường không được các bạn chú ý tới khi làm project. Thay vào đó, các bạn thường dùng cách thủ công để gán dữ liệu và đọc dữ liệu từ điều khiển. Kết quả là số lượng code behind rất lớn, mất nhiều công sức, dễ gặp lỗi, khó thay đổi thiết kế, khó đồng bộ dữ liệu giữa các điều khiển.

Bạn đang xem: Data binding là gì

Trong phần 2 của loạt bài này chúng ta đã áp dụng data binding trong thiết kế giao diện winform. Tuy vậy, chúng ta chưa giải thích chi tiết kỹ thuật này.

Trong bài viết này, chúng ta sẽ trình bày chi tiết về kỹ thuật và cách áp dụng data binding trong winform. Chúng ta sẽ áp dụng data binding thực hiện những vấn đề sau: (1) đồng bộ dữ liệu giữa object và điều khiển; (2) bật/tắt (disable/enable) nút bấm theo điều kiện giá trị của object.

Hai giải pháp này có giá trị rất lớn giúp bạn phát huy công cụ data binding của windows forms để giảm số lượng code, giúp chương trình hoạt động ổn định và an toàn hơn.


NỘI DUNG CỦA BÀI Ẩn
1. Kỹ thuật Data binding trong C# và Winform
1.1. Data binding là gì?
1.2. Data binding trong winform
1.3. Data Binding trực tiếp và gián tiếp, lớp BindingSource của Winform
1.4. Giao diện INotifyPropertyChanged
2. Áp dụng kỹ thuật data binding trong winform
2.1. Cập nhật dữ liệu trên điều khiển bằng code
2.2. Tạo class hỗ trợ INotifyPropertyChanged
2.3. Tự động disable/enable nút theo giá trị
3. Kết phần
3.1. Tải mã nguồn Giải pháp winforms (5): sử dụng data binding

Loạt bài “Các giải pháp dành cho lập trình winform”:Phần 1 – Lỗi thường gặp trong lập trình winformsPhần 2 – Thiết kế giao diện với Data Sources và BindingSourcePhần 3 – Phân chia code thành module sử dụng InterfacePhần 4 – Sử dụng thư viện DevExpress cho winformsPhần 5 – Sử dụng Data BindingPhần 6 – Sử dụng Entity Framework

Kỹ thuật Data binding trong C# và Winform


Trước khi đi vào thực hiện, chúng ta tìm hiểu qua khái niệm data binding trong winform và C#.

Data binding là gì?

Theo Wikipedia, data binding là kỹ thuật liên kết một nguồn dữ liệu với nơi sử dụng dữ liệu đó, và đồng bộ hóa dữ liệu giữa chúng.

Trong winform có thể hiểu đơn giản như thế này: nguồn dữ liệu là một object nào đó; nơi sử dụng dữ liệu là các điều khiển. Data binding cho phép liên kết một điều khiển với một object (hoặc danh sách các object). Điều khiển hiển thị thông tin chứa trong object.

Khi người dùng thay đổi giá trị trên điều khiển, giá trị mới sẽ được cập nhật ngay về object. Ở đây, sự đồng bộ dữ liệu diễn ra theo chiều điều khiển => object.

Ở chiều ngược lại, khi thay đổi giá trị của object chưa chắc đã dẫn đến sự cập nhật của điều khiển. Để thực hiện đồng bộ theo chiều ngược lại (tức là object => điều khiển), chúng ta phải sử dụng một giải pháp khác sẽ xem xét ở phần sau.

Nhiều điều khiển có thể cùng bind với một object. Nếu một trong số đó thay đổi giá trị của object, sự thay đổi này cần cập nhật đến tất cả các điều khiển khác. Đây là sự đồng bộ dữ liệu giữa các điều khiển.

Data binding trong winform

Một số lượng lớn các điều khiển cơ bản của winform hỗ trợ data binding. Cơ chế này bind (gắn kết) một thuộc tính (property) của điều khiển với một property của một object chứa dữ liệu và đồng bộ chúng. Ví dụ, Form có thuộc tính Text hỗ trợ binding với bất kỳ thuộc tính nào có kiểu string của object.

Một số điều khiển của winform không hỗ trợ data binding. Ví dụ, các điều khiển trên thanh toolbar hoặc status bar.

Xem thêm: Fishing Clash Gift Exchange, Warframe Promo Codes List (August 2021)

Để kiểm tra xem một điều khiển của winform có hỗ trợ data binding hay không, trước hết click chọn nó trên form. Ấn F4 để mở cửa sổ Properties và chọn cách sắp xếp là Categorized. Tìm đến mục Data. Nếu điều khiển hỗ trợ data binding, mục Data sẽ xuất hiện một mục con DataBindings như dưới đây.

*
*
Hỗ trợ data binding trong windows forms

Thư viện điều khiển của các hãng thứ ba cung cấp thường hỗ trợ data binding tốt hơn nhiều so với điều khiển gốc của windows forms. Bạn có thể tìm hiểu cách sử dụng thư viện Devexpress.

Data Binding trực tiếp và gián tiếp, lớp BindingSource của Winform

Binding trực tiếp là bind giữa control tới object của class chúng ta tự tạo. Binding gián tiếp là bind giữa control với một object của một class đặc biệt do .NET tạo ra có tên gọi là BindingSource.

Đây không phải là một phân loại chính thức. Sở dĩ có sự phân biệt này là do lớp BindingSource được .NET cung cấp.

Lớp BindingSource được .NET tạo ra với vai trò một nguồn dữ liệu trung gian, nằm giữa object chứa dữ liệu và điều khiển. BindingSource giúp đơn giản hóa quá trình binding cũng như đồng bộ giữa các điều khiển.

Khi thực hiện project ở phần 2 – thiết kế giao diện, chúng ta đã vận dụng cả hai cách này. Các điều khiển trên form (DataGridView, TextBox) bind gián tiếp qua BindingSource. Riêng tiêu đề của Form bind trực tiếp với một property của view model.

Binding gián tiếp qua BindingSource hỗ trợ sẵn việc đồng bộ ngược (từ object về điều khiển) cũng như đồng bộ các điều khiển. Khi dùng binding trực tiếp chúng ta phải tự thực hiện quá trình đồng bộ này.

Giao diện INotifyPropertyChanged

Khi thực hiện binding trực tiếp với object, quá trình đồng bộ chỉ diễn ra theo chiều điều khiển => object. Để sự thay đổi của object được cập nhật trên điều khiển, object cần thực thi giao diện INotifyPropertyChanged.

Chúng ta đã thực hiện giải pháp này khi bind thuộc tính Text của form Contacts với thuộc tính Title của ContactsViewModel.

Hiểu đơn giản, INotifyPropertyChanged yêu cầu class thực thi nó phải xây dựng sự kiện

public event PropertyChangedEventHandler PropertyChanged;Các điều khiển của winform hỗ trợ data binding sẽ tự đăng ký theo dõi sự kiện này nếu class thực thi giao diện tương ứng. Khi một property của object thay đổi giá trị, sự thay đổi này sẽ được thông báo ra cho những nơi đăng ký theo dõi. Do đó, điều khiển sẽ cập nhật lại sự thay đổi theo giá trị của property của object. Đây là quá trình đồng bộ ngược object => điều khiển.

Xem thêm: Tải Gta Vice City, Game Cướp Đường Phố, Mô Phỏng Thế Gi, Grand Theft Auto: Vice City

Áp dụng kỹ thuật data binding trong winform


Cập nhật dữ liệu trên điều khiển bằng code

Trước hết chúng ta sẽ thử nghiệm chức năng tính giá trị từ code rồi update giá trị của điều khiển.

Trong DxContacts form xây dựng ở bài trước đặt thêm một nút bấm Set Alias như dưới đây