WPF - есть ли способ программно оценить привязку? - PullRequest
4 голосов
/ 01 апреля 2009

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

Спасибо

Чарльз

1 Ответ

0 голосов
/ 03 декабря 2015

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

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;
         }
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...