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" />
当然我不想要一个固定的值,而是绑定对象的内容。这里有什么问题吗?
提前感谢!
您没有为任何人共享足够的代码来重新创建问题,但是阅读字里行间,我猜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}
绑定。
我不应该猜。你声称你创造了一个最小的可验证的例子,但没有分享它。如果你分享它,我们可以自信地解决你的问题。