【发布时间】:2020-07-29 12:05:53
【问题描述】:
我正在尝试翻译此 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(修改自another 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”会显示为 null。即使我将一个不存在的名称传递给 Binding 的构造函数。
如果我在 XAML 中进行绑定,绑定可以正常工作,但我必须在代码隐藏中进行。如果不清楚,我正在尝试获取此视图的第一个祖先的 DataContext 的实际 值,它是 UserControl 类型。
我做错了什么?
【问题讨论】:
-
当 Dummy 实例显然没有祖先 ot 类型 UserControl 时,这应该如何工作?请让我们知道您实际想要达到的目标。
-
我正在尝试获取我的视图所属的视图的 DataContext 的值。我的视图继承自 RadTabItem(来自第三方提供商),并包含在另一个继承自 UserControl 的视图中。
-
抱歉,这还不够详细。除此之外,DataContext 属性支持值继承,这意味着您的视图的 DataContext 等于其父元素的 DataContext,除非您明确覆盖它。
标签: c# wpf data-binding code-behind relativesource