2009-04-27 6 views
7

Tôi cần phải cập nhật tất cả các ràng buộc trên UserControl của tôi khi khả năng hiển thị của nó thay đổi thành Hiển thị. Khá nhiều tất cả các ràng buộc của tôi chắc chắn sẽ là tài sản của các điều khiển người dùng DataContext vì vậy tôi đang cố gắng để cập nhật các mục tiêu mà ràng buộc:Cập nhật tất cả các ràng buộc trong UserControl cùng một lúc

BindingOperations.GetBindingExpressionBase(this, UserControl.DataContextProperty).UpdateTarget(); 

Nhưng tôi nhận được null là kết quả của phương pháp GetBindingExpression(..) và tôi tự hỏi nếu tôi sử dụng sai.

Ngoài ra, có cách nào khác tốt để làm mới tất cả các ràng buộc trên điều khiển (sử dụng DataContext làm nguồn).

Trả lời

15

Vâng, bạn có thể chỉ cần tái giao DataContext:

var dataContext = DataContext; 
DataContext = null; 
DataContext = dataContext; 

FYI, đặt tài sản giá trị của nó (ví dụ: DataContext = DataContext) sẽ không làm việc.

+0

OMG, bạn là một thiên tài! Tại sao, Tại sao tôi không nghĩ về điều này ?! Cảm ơn, điều này đã làm việc :) – Alexandra

+2

Có cách nào WPF'y duyên dáng hơn để thực hiện việc này không? Không nên WPF hỗ trợ một số loại cơ chế làm mới ràng buộc? – BrettRobi

+2

Điều khó hiểu nhất là không có dòng thứ hai, việc làm mới không xảy ra. Nó xuất hiện không có vấn đề làm thế nào bạn shuffle các DataContext bất động sản, không có gì xảy ra trừ khi nó được thiết lập để null. Cảm ơn câu trả lời hữu ích. – EFraim

1

Bạn đang sử dụng phương pháp BindingOperations.GetBindingExpressionBase trên thuộc tính sai. Bạn phải sử dụng nó trên các thuộc tính có ràng buộc với thuộc tính DataContext, không phải thuộc tính DataContext.