2010-10-07 29 views
6

Tôi có thể đang tìm kiếm theo cách này sai, nhưng:Nhận kết quả của Mã số

có cách nào để nhận giá trị kết quả của một ràng buộc qua mã không?

Có lẽ một cái gì đó rõ ràng rõ ràng, nhưng tôi không thể tìm thấy nó.

Trả lời

9

Bạn chỉ cần gọi phương thức ràng buộc ProvideValue. Phần khó khăn là bạn cần phải vượt qua IServiceProvider hợp lệ cho phương thức ... CHỈNH SỬA: thực sự, điều đó không đúng ... ProvideValue trả về một BindingExpression, không phải giá trị của thuộc tính bị ràng buộc.

Bạn có thể sử dụng các thủ thuật sau đây:

class DummyDO : DependencyObject 
{ 
    public object Value 
    { 
     get { return (object)GetValue(ValueProperty); } 
     set { SetValue(ValueProperty, value); } 
    } 

    public static readonly DependencyProperty ValueProperty = 
     DependencyProperty.Register("Value", typeof(object), typeof(DummyDO), new UIPropertyMetadata(null)); 

} 

public object EvalBinding(Binding b) 
{ 
    DummyDO d = new DummyDO(); 
    BindingOperations.SetBinding(d, DummyDO.ValueProperty, b); 
    return d.Value; 
} 

... 

Binding b = new Binding("Foo.Bar.Baz") { Source = dataContext }; 
object value = EvalBinding(b); 

Không rất thanh lịch, nhưng nó hoạt động ...

+0

Ah vâng, đó là nó. Cảm ơn. – Inferis

+0

Tôi đang cố gắng làm một cái gì đó tương tự, nhưng chạy vào các vấn đề, tôi nghĩ bởi vì tôi cần phải sử dụng RelativeSource. Bất kỳ ý tưởng làm thế nào để tránh người thân được đánh giá liên quan đến DummyDO thay vì mục tiêu tiềm ẩn trong bối cảnh ràng buộc? – tobriand

+0

@tobriand, tôi không chắc mình hiểu ... Trường hợp sử dụng của bạn là gì? –

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