Я пишу пользовательский элемент управления, и у меня есть путь свойства как строка (думать 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;
}
}
Из ссылки 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, установите для него привязку с вашим путем к свойству в качестве пути и произвольным объектом в качестве источника. привязка будет выполнена, и вы можете увидеть, что (если что) находится в конце пути свойства. Это единственный способ сделать такие вещи в коде. вы можете написать механизм рекурсивного отражения, который мог бы следовать по пути свойств, но он уже был выполнен, мы используем его, когда связываем. займет пять минут, чтобы написать:)