WPF, Как я должен оценить путь свойства?

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

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

Результат (благодаря Арану Mulholland):

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

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;
    }
}
10
задан Dave Clemmer 18 September 2011 в 18:15
поделиться

1 ответ

Из ссылки NSTableView :

- (void)setDropRow:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation

....

"Передача значения -1 для строки и NSTableViewDropOn в качестве операции приводит к выделению всего табличного представления, а не определенной строки. Это полезно, если данные, отображаемые получателем, не позволяют пользователю удалять предметы в определенном местоположении строки "

-121--4903924-

Полностью отключите тему вашего первоначального вопроса, но возможно ли, что на самом деле вы хотели:

my $webpage = URI->new("http://domainname.co.uk/foo/bar.html");
my $path = $webpage->rel("http://domainname.co.uk/");
print "public_html/$path\n";
-121--4571429-

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

6
ответ дан 4 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: