2009-03-10 12 views
12

Sự khác biệt giữa việc tự ràng buộc tham chiếu thông qua tên so với tự tham chiếu qua RelativeSource là gì?Sự khác biệt giữa ElementName = "<Me>" và RelativeSource tự?

Ví dụ:

<!-- Self referential via name --> 
<Window ... 
    x:Name="This" 
    DataContext="{Binding Path=Data, ElementName=This}"/> 

so

<!-- Self referential via RelativeSource --> 
<Window ... 
    x:Name="This" 
    DataContext="{Binding Path=Data, RelativeSource={RelativeSource Self}}"/> 

Trong dự án của tôi họ dường như cư xử hệt, nhưng tôi đang sử dụng chúng trực tiếp trong một cửa sổ. Điều này có nghĩa rằng tôi ngay lập tức thích cái cũ hơn vì nó ít gõ.

Lợi thế duy nhất của RelativeSource là khả năng tự tham chiếu của nó trong (ví dụ) một phong cách được sử dụng rộng rãi? Hoặc là có một số khác biệt ngữ nghĩa bổ sung?

Trả lời

8

Lưu ý: Không phải trình hướng dẫn WPF

Khi bạn ràng buộc trực tiếp vào phần tử WPF như trong ví dụ của bạn thì không có sự khác biệt. "Điều này" có thể được giải quyết và sẽ liên kết với cùng một mục như Tự.

Sự nghi ngờ của tôi là sự khác biệt nằm khi bạn ràng buộc thông qua các cấu trúc như Kiểu. Trong trường hợp đó, những gì bạn thực sự muốn liên kết là phần tử được áp dụng cho kiểu đó. Trong trường hợp này, RelativeSource Self sẽ cung cấp cho bạn phần tử đó, nơi "this" sẽ chỉ cung cấp cho bạn một cá thể Style.

+1

Đây là điều duy nhất tôi có thể nghĩ hoặc tìm, cũng vậy. Tôi đã chạy vào rất nhiều câu hỏi khác lại: WPF nơi tôi bị mất thông tin, mặc dù, vì vậy tôi muốn xem nếu có ai khác đã có một cái gì đó về điều này. Cảm ơn, Jared. :) –

-1

Tại sao bạn nghĩ rằng có sự khác biệt giữa chúng? Tôi nghĩ rằng họ nên giống hệt nhau, vì chúng là hai cách đề cập đến cùng một yếu tố.

+0

'Tôi nghĩ' và 'nên' không cấu thành câu trả lời. Xem xét việc đánh giá cách thức mỗi phương thức xử lý mục tiêu và các kịch bản có thể gây ra sự khác biệt. Xem câu trả lời của JaredPar. – Gusdor

2

Nếu bạn có xu hướng tái cấu trúc tên các điều khiển của mình nhiều thì sử dụng biểu mẫu tự điều chỉnh có thể hấp dẫn hơn nếu không, tôi sẽ nói đó là cuộc gọi tôi sẽ thực hiện dựa trên hiệu suất. Xây dựng một thử nghiệm nhỏ và xem loại ràng buộc nào hoạt động tốt hơn và chọn loại đó. Nếu sự khác biệt hiệu suất là không đáng kể sau đó tôi chắc chắn sẽ đi vào xem xét các cân nhắc bảo trì khác như sự xuất hiện tổng thể và thời gian để loại. Cũng đừng quên, khi sử dụng biểu mẫu tự tham chiếu, bạn không phải đặt tên phần tử của bạn, do đó bạn phải bao gồm yêu cầu đặt tên bổ sung cho biểu mẫu ElementName khi so sánh mức độ nhập và ngữ cảnh giữa chuột và bàn phím.

Cá nhân tôi thích hình thức ràng buộc tham chiếu khi có ý nghĩa cho mục đích tái cấu trúc dễ dàng hơn và thực tế là tôi không phải di chuyển quanh tài liệu XAML của mình để thêm tên phần tử khi tôi thiết lập ràng buộc.