This article has been localized into Vietnamese by the community.
Sử dụng DataContext
Thuộc tính DataContext là nguồn mặc định của các ràng buộc, trừ khi bạn khai báo cụ thể một nguồn khác, giống như chúng ta đã làm trong chương trước với thuộc tính ElementName. Nó được định nghĩa trên lớp FrameworkElement ,mà hầu hết các UI control, bao gồm Cửa sổ WPF, thừa hưởng. Nói một cách đơn giản, nó cho phép bạn chỉ định một cơ sở cho các ràng buộc của bạn
Không có nguồn mặc định cho thuộc tính DataContext (đơn giản là không có từ đầu), nhưng vì DataContext được kế thừa qua hệ thống phân cấp điều khiển, bạn có thể đặt DataContext cho chính Window và sau đó sử dụng nó trong tất cả các child control. Hãy thử minh họa điều đó bằng một ví dụ đơn giản:
<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataContextSample" Height="130" Width="280">
<StackPanel Margin="15">
<WrapPanel>
<TextBlock Text="Window title: " />
<TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150" />
</WrapPanel>
<WrapPanel Margin="0,10,0,0">
<TextBlock Text="Window dimensions: " />
<TextBox Text="{Binding Width}" Width="50" />
<TextBlock Text=" x " />
<TextBox Text="{Binding Height}" Width="50" />
</WrapPanel>
</StackPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.DataBinding
{
public partial class DataContextSample : Window
{
public DataContextSample()
{
InitializeComponent();
this.DataContext = this;
}
}
}
Mã phía sau cho ví dụ này chỉ thêm một dòng mã: Sau lệnh gọi InitalizeComponent () tiêu chuẩn, chúng tôi gán tham chiếu "this" cho DataContext, về cơ bản chỉ nói với Window rằng chúng tôi muốn chính nó là bối cảnh dữ liệu.
Trong XAML, chúng tôi sử dụng thực tế này để liên kết với một số thuộc tính Window, bao gồm Tiêu đề, Chiều rộng và Chiều cao. Vì cửa sổ có DataContext, được truyền cho các child control, chúng tôi không phải xác định nguồn trên mỗi liên kết - chúng tôi chỉ sử dụng các giá trị như thể chúng có sẵn.
Hãy thử chạy ví dụ và thay đổi kích thước cửa sổ - bạn sẽ thấy các thay đổi kích thước được thay đổi ngay lập tức trong các hộp văn bản. Bạn cũng có thể thử viết một tiêu đề khác trong hộp văn bản đầu tiên, nhưng bạn có thể ngạc nhiên khi thấy sự thay đổi này không được thay đổi. Thay vào đó, bạn phải chuyển trọng tâm sang điều khiển khác trước khi thay đổi được áp dụng. Tại sao? Vâng, đó là chủ đề cho chương tiếp theo.
Tổng kết
Sử dụng thuộc tính DataContext giống như đặt cơ sở của tất cả các ràng buộc thông qua hệ thống phân cấp của các control. Điều này giúp bạn tránh những rắc rối khi xác định thủ công nguồn cho mỗi ràng buộc và một khi bạn thực sự bắt đầu sử dụng các ràng buộc dữ liệu, bạn chắc chắn sẽ đánh giá cao thời gian và typing.
Tuy nhiên, điều này không có nghĩa là bạn phải sử dụng cùng DataContext cho tất cả các control trong một Cửa sổ. Vì mỗi điều khiển có thuộc tính DataContext riêng, bạn có thể dễ dàng phá vỡ chuỗi kế thừa và ghi đè DataContext bằng một giá trị mới. Điều này cho phép bạn thực hiện những việc như có DataContext toàn cục trên cửa sổ và sau đó là DataContext cụ thể và cục bộ hơn trên ví dụ: một panel giữ một hình thức riêng biệt hoặc một cái gì đó dọc theo những dòng đó.