WPF 绑定到 UserControl 的 DependencyProperty 未按预期工作

WPF Binding to UserControl´s DependencyProperty not working as expected

我对 DependecyProperty 绑定有一些奇怪的问题。 为了让问题更简单,我创建了一些虚拟控件,它们具有相同的不良行为

我有一个 UserControl,它有一个在后面的代码中定义的 DependencyProperty:

public static readonly DependencyProperty TestValueProperty = DependencyProperty.Register("TestValue", typeof(string), typeof(Test), new PropertyMetadata(default(string)));

public string TestValue
{    
     get { return (string)GetValue(TestValueProperty); }
     set { SetValue(TestValueProperty, value); }
}

这个属性用于XAML:

<Label Content="{Binding TestValue}" />

这个控件应该像这样在另一个控件中使用:

<views:Test TestValue="{Binding Settings.Setting123}" />

Settings 在视图模型中定义为 属性.

但是 Settings.Setting123 的内容在我的用户控件标签中不可见。

当写一些修复值而不是绑定时它工作正常:

<views:Test TestValue="Test" />

当然我要的不是固定值,而是绑定对象的内容。 任何提示这里出了什么问题?

提前致谢!

您没有共享足够的代码让任何人重现问题,但从字里行间来看,我猜 Label 在您的 UserControl XAML 中。如果 TestValueUserControl 的 属性,这可能会起作用:

<Label Content="{Binding TestValue, RelativeSource={RelativeSource AncestorType=UserControl}}" />

但是,您可能会这样做(并使其半工作,使用文字字符串)的一个原因是如果您使 UserControl 成为自己的 DataContext。在那种情况下,那么问题是您将 UserControl 变成了自己的 DataContext。如果你这样做了,绑定的 Binding 将在 UserControl 的上下文中被评估,它没有 Settings.Setting123 属性。

控件的 DataContext 的意思是,当您在其中一个控件属性 或其 XAML 中有一个 Binding 时,那是 Binding 去寻找你绑定的 属性 的地方。你明确地告诉它在错误的地方看。

如果您将 UserControl 设为自己的 DataContext,则无法将任何内容绑定到它。这就是为什么你不应该那样做。它就像那些除了从墙上拔下插头什么都不做的机器之一。相反,在 UserControl XAML 中使用上面的 {RelativeSource AncestorType=UserControl} 绑定。

我不应该猜测。您声称您创建了一个最小的可验证示例,但没有费心分享它。如果您分享它,我们可以放心地解决您的问题。