WPF – Cơ Bản về Data Binding

Data Binding là kĩ thuật dùng để tạo gắn kết giữa phần giao diện (UI) và dữ liệu thông qua phần business logic hoặc giữa các đối tượng UI với nhau. Nhờ Data Binding, UI có thể tự động cập nhật lại để hiển thị các thay đổi trong dữ liệu mà không cần sự can thiệp từ code behind.Ngoài ra, Data Binding trong WPF còn hỗ trợ các chiều khác nhau, nghĩa là các thay đổi có thể cập nhật từ UI vào dữ liệu hay ngược lại.





[caption id="" align="aligncenter" width="620"] tuanphamdg[/caption]

Giới thiệu


Một Binding bao gồm 4 thành phần chính là: binding target, target property, binding source và một path  (đường dẫn) đến giá trị cần thiết trong binding source, thông thường path này là một source property.


Ví dụ bạn muốn gắn property Name của một đối tượng Person cho property Text của một TextBox. Khi đó:


- Binding target: TextBox


- Target property: property Text của TextBox


- Binding source: đối tượng Person


-Path: đường dẫn đếnproperty Name của đối tượng Person.


Mô hình Data Binding của WPF theo hình minh họa như trên


Cần lưu ý là target property phải là một dependency property. Đa số các property của lớp UIElement  đều là các dependency property. Đối với binding source, bạn có thể sử dụng bất kì đối tượng .NET nào, chẳng hạn như các đối tượng trong ADO.NET, XML hay các control trong WPF.



Binding Mode


Binding mode sẽ chỉ ra hướng mà dữ liệu sẽ được cập nhật. Bao gồm 5 giá trị từ enum BindingMode là:






























NameDescription
OneWayCập nhật target property theo source property
TwoWayCập nhật hai chiều giữa target property và source property.
OneTimeKhởi tạo target property từ source property. Sau đó việc cập nhật dữ liệu sẽ không được thực hiện.
OneWayToSourceGiống OneWay nhưng theo hướng ngược lại: cập nhật từ target property sang source property.
DefaultHướng binding dựa trên target property. Với target property mà người dùng có thể thay đổi giá trị (như TextBox.Text) thì nó là TwoWay, còn lại là OneWay

* Nhưng khi nào thì dữ liệu sẽ bắt đầu được cập nhật, chúng ta sẽ nói sau về phần UpdateSourceTrigger 


Ví dụ:


Giả sử tôi muốn cập nhật nội dung của một TextBox theo giá trị được nhập vào TextBox khác. Cửa sổ minh họa cho ví dụ này cần hai control chính là txtHvà txtS:




[code language="xml"]
<StackPanel>
<TextBox x:Name="txtH" Text="Red"/>
<TextBox x:Name="tblS"/>
</StackPanel>
[/code]

Bản chất của việc tạo binding bao gồm 2 bước:

-Tạo một đối tượng System.Windows.Data.Binding và thiết lập các giá trị cần thiết.

-Gọi phương thức instance FrameworkElement.SetBinding() của target binding. FrameworkElement được thừa kế từ UIElement và là lớp cha của các control trong WPF. Phương thức này có tham số đầu tiên là một dependency property.

Bạn có thể tạo trong XAML theo cách thông thường sau:










1

2

3

4

5

6

7

8

9


<StackPanel>

    <TextBox x:Name="txtH">Red</TextBox>

    <TextBox x:Name="txtS">

            <TextBox.Text>

                <Binding ElementName="txtH" Path="Text" Mode="OneWay" 

                      StringFormat="My name is {0}"/>

            </TextBox.Text>

     </Label>

</StackPanel>




Tuy nhiên, XAML còn hỗ trợ một dạng cú pháp gọn hơn với cùng chức năng như đoạn mã trên:





[code language="xml"]
<StackPanel>
<TextBox x:Name="txtH" Text="Red"/>
<TextBox x:Name="tblS"
Text="{Binding Text, ElementName=txtH, Mode=TwoWay,
StringFormat='My name is {0}'}"/>
</StackPanel>
[/code]


Kết quả:



Ví dụ về binding màu:



 appbar.skydrive.download


Chúc các bạn thành công. download source


Chúc các bạn thành công!
PHẠM TUÂN