WPF Как мне оценить путь к свойству? - PullRequest
10 голосов
/ 06 февраля 2010

Я пишу пользовательский элемент управления, и у меня есть путь свойства в виде строки (думаю, comboBox.SelectedValuePath).
Каков наилучший способ в коде для оценки этой строки для произвольного объекта?

Я, очевидно, могу просто разобрать его сам, но это взлом, и я хочу, чтобы путь поддерживал все, что comboBox.SelectedValuePath делает (для согласованности).

Результат (спасибо Арану Малхолланду):

Не уверен насчет производительности, но сейчас мне плевать на производительность.

public class BindingEvaluator {
    #region Target Class

    private class Target : DependencyObject {
        public static readonly DependencyProperty ResultProperty = DependencyProperty.Register(
            "Result", typeof(IEnumerable), typeof(BindingEvaluator)
        );

        public object Result {
            get { return this.GetValue(ResultProperty); }
            set { this.SetValue(ResultProperty, value); }
        }
    }

    #endregion

    public object GetValue(object source, string propertyPath) {
        var target = new Target();
        BindingOperations.SetBinding(target, Target.ResultProperty, new Binding(propertyPath) {
            Source = source,
            Mode = BindingMode.OneTime
        });
        return target.Result;
    }
}

1 Ответ

6 голосов
/ 06 февраля 2010

Создайте объект, у которого есть одно свойство зависимости типа object, установите для него привязку, указав путь к свойству в качестве пути, и произвольный объект в качестве источника. привязка будет выполнена, и вы увидите, что (если что-нибудь) находится в конце пути свойства. Это единственный способ, который я нашел, чтобы делать такие вещи в коде. Вы могли бы написать рекурсивный механизм отражения, который мог бы следовать пути свойства, но это уже было сделано, мы используем его, когда привязываем. у тебя пять минут, чтобы написать:)

...