WPF绑定到usercontrol的DependencyProperty没有按预期工作

本文关键字:工作 DependencyProperty 绑定 usercontrol WPF | 更新日期: 2023-09-27 18:15:48

我有一些奇怪的问题与dependdecyproperty -binding。为了使问题更简单,我创建了一些伪控件,它具有相同的不需要的行为

我有一个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在viewmodel中被定义为属性。

但是Settings.Setting123的内容在我的usercontrol的标签中不可见。

当写一些固定值而不是绑定时,它工作得很好:

<views:Test TestValue="Test" />

当然我不想要一个固定的值,而是绑定对象的内容。这里有什么问题吗?

提前感谢!

WPF绑定到usercontrol的DependencyProperty没有按预期工作

您没有为任何人共享足够的代码来重新创建问题,但是阅读字里行间,我猜Label是在您的UserControl XAML中。如果TestValue是你的UserControl的属性,这可能会工作:

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

然而,您可能这样做的一个原因是,如果您将UserControl设置为自己的DataContext。在这种情况下,,那么问题是您使UserControl成为自己的DataContext 。如果您这样做了,那么绑定对象上的Binding将在没有Settings.Setting123属性的UserControl上下文中被求值。

控件的DataContext的意思是,当你有一个Binding控件属性或在它的XAML,这就是Binding去寻找你绑定到的属性。你明确地告诉它往错误的地方看。

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

我不应该猜。你声称你创造了一个最小的可验证的例子,但没有分享它。如果你分享它,我们可以自信地解决你的问题。