Я пытаюсь перевести этот код XAML:
<Binding Path="DataContext" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}" />
В этот C# код:
var binding = new Binding("DataContext")
{
RelativeSource = new RelativeSource {AncestorType = typeof(UserControl)}
};
var value = PropertyPathHelper.GetValue(binding);
Реализация моего PropertyPathHelper (изменено с другого thread ) класс выглядит следующим образом:
public static class PropertyPathHelper
{
public static object GetValue(Binding binding)
{
BindingOperations.SetBinding(_dummy, Dummy.ValueProperty, binding);
return _dummy.GetValue(Dummy.ValueProperty);
}
private static readonly Dummy _dummy = new Dummy();
private class Dummy : DependencyObject
{
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(object), typeof(Dummy), new UIPropertyMetadata(null));
}
}
Либо мое объявление Binding неверно, либо моя реализация PropertyPathHelper неверна, но я не знаю, какой, потому что во время выполнения " var value "выходит как ноль. Даже если я передам несуществующее имя в конструктор Binding.
Привязка работает нормально, если я делаю это в XAML, но у меня есть , чтобы сделать это в коде позади. В случае, если неясно, я пытаюсь получить фактическое значение DataContext первого предка этого представления, который имеет тип UserControl.
Что я делаю неправильно?