2015-09-29 18 views
6

Khi sử dụng cú pháp {Binding} truyền thống, bạn có thể chỉ định tên phần tử để trỏ đến một điều khiển cụ thể trên trang và có thể truy cập các thuộc tính của nó. Ví dụ, nếu trang web được đặt tên page bạn có thể làm:Thay thế cho ElementName trong x: Liên kết với DataTemplates

{Binding ElementName=Page, Path=Name} 

Với cú pháp {x:Bind} nó nói

Với x: Ràng buộc, bạn không cần phải sử dụng ElementName = xxx như một phần của biểu thức ràng buộc. Với x: Bind, bạn có thể sử dụng tên của phần tử làm phần đầu tiên của đường dẫn cho ràng buộc vì các phần tử được đặt tên trở thành các trường trong trang hoặc điều khiển người dùng đại diện cho nguồn ràng buộc gốc .

Vì vậy, cho ví dụ trên trong {x: Bind} sẽ

{x:Bind page.Name} 

nào hoạt động tốt, cho đến khi nó nằm bên trong một mẫu dữ liệu (ví dụ của một ListView ItemTemplate). Trong trường hợp này nó không còn hoạt động vì nó đang tìm kiếm Page vào loại dữ liệu cụ thể dẫn đến các lỗi sau (giả sử kiểu dữ liệu của tôi là customer):

XamlCompiler lỗi WMC1110: không hợp lệ ràng buộc path 'Page.Name ': Thuộc tính' Trang 'không thể tìm thấy trên loại' Khách hàng '

Giải pháp sử dụng cú pháp {x: Bind} với bảng điều khiển và điều khiển truy cập bên ngoài mẫu dữ liệu là gì?

Ví dụ mã có sẵn here (lưu ý cụ thể cam kết)

Trả lời

9

Theo như tôi biết vào thời điểm này trong thời gian không có cách nào để ràng buộc trực tiếp đến một tài sản của một điều khiển bằng cách sử dụng x: Phương pháp ràng buộc như nó không hỗ trợ tên phần tử bên trong định nghĩa liên kết của nó.

Điều đó không có nghĩa là bạn không thể liên kết với điều khiển bên trong một DataTemplate mà bạn vẫn có thể thực hiện điều này để kiểm soát truy cập nhưng bạn không thể sử dụng cú pháp ràng buộc x: Bind.

<DataTemplate x:DataType="local:Customer"> 
    <StackPanel Orientation="Vertical"> 
     <Button Content="{Binding Name, ElementName=page}" /> 
     <TextBlock Text="{x:Bind Title}" /> 
    </StackPanel>   
</DataTemplate> 

Lý do lỗi bạn nhận được là do cách dữ liệu mẫu bố trí nguồn dữ liệu của họ. Ràng buộc x: Bind không thể tham chiếu đến một đối tượng điều khiển và loại Customer của bạn có thuộc tính hoặc đường dẫn Page.Name. Như đã trình bày ở trên, cách duy nhất để truy cập các thuộc tính điều khiển người dùng ngoài tầm kiểm soát của bạn chỉ sử dụng XAML là để quay trở lại cơ chế ràng buộc chuẩn.

Tôi hy vọng điều này sẽ trả lời câu hỏi của bạn.

Các vấn đề liên quan