我对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
在viewmodel中定义为property。
但Settings.Setting123
的内容在我的usercontrol标签中不可见。
当编写一些修复值而不是绑定时,它可以正常工作:
<views:Test TestValue="Test" />
但当然我不想要固定值,而是绑定对象的内容。 有什么提示这里出了什么问题?
提前致谢!
答案 0 :(得分:0)
你没有为任何人分享足够的代码来重新创建问题,但是在行之间阅读,我猜你Label
XAML中有UserControl
。如果TestValue
是UserControl
的属性,则可能会有效:
<Label Content="{Binding TestValue, RelativeSource={RelativeSource AncestorType=UserControl}}" />
然而,你可能已经做过的一个原因(并且使用文字字符串进行半工作)就是你使UserControl
成为自己的DataContext
。在这种情况下,然后问题是您已将UserControl
设为自己的DataContext
。如果您这样做,那么绑定的Binding
上的UserControl
将在Settings.Setting123
的上下文中进行评估,DataContext
没有Binding
属性。
控件Binding
的含义是,当您在某个控件属性上或其XAML 中有UserControl
时,DataContext
就是{RelativeSource AncestorType=UserControl}
去寻找你绑定的属性。你明确告诉它要错误的地方。
如果您将UserControl
设为自己的{{1}},则无法绑定任何内容。这就是你不应该这样做的原因。就像其中一台机器什么都不做,只能从墙上拔掉它自己。相反,在{{1}} XAML中使用上面的{{1}}绑定。
我不应该猜。您声称您创建了一个最小的可验证示例,但没有打扰共享它。如果您分享,我们可以放心地解决您的问题。