2009-04-01 5 views
2

Кто-нибудь знает, как получить текущее значение, связанное с привязкой? Недавно я столкнулся с проблемой, когда мне захотелось получить значение, связанное с определенной ячейкой в ​​WPFoolKit DataGrid, - поэтому я создал функцию, которая получает строку Path, разбивается на '.' и пытается использовать PropertyDescriptor в цикле, пытаясь получить связанное значение. Конечно, есть лучший способ :). Если кто-то может указать мне в правильном направлении, я буду любить тебя навсегда.WPF - Есть ли способ программно оценить привязку?

Спасибо,

Чарльз

+0

Я думаю, что это сообщение отвечает на ваш вопрос: [http://social.expression.microsoft.com/Forums/en-US/w пф/резьба/315d2442-b978-4e5f-89cd-1004a51f390d /] (http://web.archive.org/web/20120202063115/http://social.expression.microsoft.com/Forums/en-US/wpf/ резьба/315d2442-b978-4e5f-89cd-1004a51f390d) – sacha

ответ

0

Как данная ссылка на ответ является в настоящее время доступна только на Веб-архив, я продублировал ответ, который был дан там:

public static class DataBinder 
{ 
    private static readonly DependencyProperty DummyProperty = DependencyProperty.RegisterAttached(
     "Dummy", 
     typeof(Object), 
     typeof(DependencyObject), 
     new UIPropertyMetadata(null)); 

    public static object Eval(object container, string expression) 
    { 
     var binding = new Binding(expression) { Source = container }; 
     return binding.Eval(); 
    } 

    public static object Eval(this Binding binding, DependencyObject dependencyObject = null) 
    { 
     dependencyObject = dependencyObject ?? new DependencyObject(); 
     BindingOperations.SetBinding(dependencyObject, DummyProperty, binding); 
     return dependencyObject.GetValue(DummyProperty); 
    } 
} 

Пример:

public partial class PropertyPathParserDemo : Window 
{ 
    public PropertyPathParserDemo() 
    { 
     InitializeComponent(); 
     Foo foo = new Foo() { Bar = new Bar() { Value = "Value" } }; 
     this.Content = DataBinder.Eval(foo, "Bar.Value"); 
    } 

    public class Foo 
    { 
     public Bar Bar 
     { 
      get; 
      set; 
     } 
    } 

    public class Bar 
    { 
     public string Value 
     { 
      get; 
      set; 
     } 
    } 
} 
Смежные вопросы